Задать вопрос
  • Объясните как работает php-fpm?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала почитайте что такое SAPI. Затем представьте что apache + mod_php разделили на web-сервер, который проксирует запросы на php-fpm и отдает статику, и собственно отдельный web-сервер который имплементит SAPI и выполняет запросы связанные только с php. То есть статику отдавать мы можем только через php. Суть примерно та же что и у apache2 + prefork + mod_php но оптимизированный только для работы с php. Так же можно поставить на фронт более быстрый и легковесный сервер который умеет проксировать запросы.

    То есть php-fpm это эдакий fast-cgi сервер который постоянно держит готовые для работы пул-процессов (сколько в пуле процессов настраивается, так же как и от какого пользователя их запускать и все такое прочее). Каждый новый запрос уходит в какой-либо процесс из пула, запрос отрабатывает, возвращаем результат тому кто попросил (web-серверу обычно). Если процесс падает (fatal допустим) - поднимаем новый.

    Принципиальной разницы между apache2+mod_php нету, просто упрощается инфраструктура. Наш web-сервер должен только уметь проксировать запросы и отдавать статику, а php-frpm вообще может быть на разных машинах (балансировщиком можно раскидывать запросы). Ну и сами понимаете, nginx + php-fpm будет быстрее обрабатывать запросы чем apache2+mod_php какой бы мы менеджер процессов не использовали в апаче. Минусов по сравнению с apache+mod_php я даже не могу предложить.

    А php-runtime не зависит от этого. Он один на всех, CLI, FPM, mod_php...
    Ответ написан
    7 комментариев
  • Как вывести количество имеющихся в конкретном складе тех или иных товаров?

    Можно использовать следующее:

    CModule::IncludeModule('catalog');
    $arFilter = Array("PRODUCT_ID"=>array(94247,162284));
    $rsStoreAmount = CCatalogStoreProduct::GetList(Array(),$arFilter,false,false,Array());
    while($arStoreAmount = $rsStoreAmount->Fetch())
    {
    	echo "<pre>";
    	print_r($arStoreAmount);
    	echo "</pre>";
    }
    Ответ написан
    6 комментариев
  • Как вставить иконку только для первого пункта меню в Wordpress?

    vladislav_boychenko
    @vladislav_boychenko
    Купаюсь в гривнах
    У вас есть примерно такая структура:
    • Первый пункт
    • Второй пункт


    В стилях и пишем:
    .nav li:first-child{background: url(.../путь к иконке) no-repeat center left; padding-left: 20px;}

    Это что-то примерное, нужно подстраивать под себя.
    Ответ написан
    1 комментарий
  • Как вставить иконку только для первого пункта меню в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Либо просто с помощью CSS бекграундом или :after дописать, или же если нужно все-таки разметку вставить () - в админке для пункта меню укажите специальный css-класс, например has-icon-login, далее хукаетесь в walker_nav_menu_start_el и модифицируете разметку:
    function my_custom_markup( $item_output, $item, $depth, $args ) {
    
    	// Отлавливаем элемент меню с нашим классом
    	if ( in_array( 'has-icon-login', $item->classes ) ) {
    		// Меняем разметку
    		return str_replace(
    			'<a',
    			'<i class="icon-user"></i><a',
    			$item_output
    		);
    	}
    
    	return $item_output;
    
    }
    add_filter( 'walker_nav_menu_start_el', 'my_custom_markup', 100, 4 );
    Ответ написан
    Комментировать
  • Почему выскакивает ошибка #1064 при выполнении SQL запроса INSERT INTO?

    shaks
    @shaks
    во первых запрос должен иметь примерно такой формат:
    INSERT INTO `price` (`N`, `title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES  (1,'Poi',2,1000,1500,2000,4000)

    обрати внимание, что кол-во полей не то, кол-во данных которые вставляются не соответствует кол-ву полей
    во вторых у вас тип данных не правильный

    `localsum` char(100) not null,
    `regionsum` char(100) not null,
    `rfsum` char(100) not null,
    `intersum` char(100) not null,

    эти поля должны быть int а не char
    Если вы хотите именно строку, то цифры (при вставке) нужно оборачивать в кавычки

    в третьих, раз `N` int not null auto_increment, то значение N можно или игнорировать при вставке, или передавать NULL

    P.S. Строку вставки можно делать так:
    INSERT INTO `price` SET `field`=1, `field2`=2, `field3`=3

    так визуально понятней что куда вставляется

    ------
    UPD
    <?php
    // соединение с базой:
    chdir(dirname(__FILE__));
    $dsn = 'mysql:host=localhost'.
        ';dbname=temp_development'.
        ';port='.
        ';connect_timeout=15';
    
    $user = 'root';
    $password = '123qwe#';
    $db = new PDO($dsn, $user, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    
    
    $file = "./price.txt";# 'Poi',2,1000,1500,2000
    # в файле я убрал последнее значение, т.к. для него нет соответствующей колонки в ДБ
    if($fp = fopen($file, 'r'))
    {
        $sql = "INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ";
        $prepare = array();
        $insert = array();
        while($line = fgets($fp))
        {
            $line = trim($line);
            if(!$line)
                continue;
            # Читаю файл построчно, чтоб память не загадилась если файл содержит оч много данных
    
            // валидацию данных я не делаю
            array_push($prepare, implode(",", array_fill(0, 5, "?")));
            $insert = array_merge($insert, explode(",", $line));
    
        }
        $pr = $db->prepare($sql."( ".implode("), (", $prepare)." )");
        $pr->execute($insert);
    }

    этот код сгенерирует такой вот запрос в бд:
    INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ( '\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000' )
    Ответ написан
    3 комментария
  • Почему выскакивает ошибка #1064 при выполнении SQL запроса INSERT INTO?

    скопировал ваш запрос, преобразовал кодировку в ANSI, получил:
    INSERT INTO `price` VALUES (10,п»ї'Poi',2,1000,1500,2000,4000)
    "п»ї" мускулю и не нравится
    а запрос все равно не верный, вы передаете 7 параметров, а в таблице 6 колонок.
    Ответ написан
    5 комментариев
  • Как сделать выполнять действие при удалении поста wp?

    dimasmagadan
    @dimasmagadan
    заменить вот это
    $content = get_the_content();

    на это
    $content_post = get_post($postid);
    $content = $content_post->post_content;

    дальше не смотрел.
    Ответ написан
    Комментировать
  • Как сделать выполнять действие при удалении поста wp?

    rOOse
    @rOOse
    Frontend developer
    не надо регулярки
    get_attached_media( $type, $post_id ) или get_children( $args, $output );
    и далее:
    wp_delete_attachment( $post_id, $force_delete = false )
    Ответ написан
    Комментировать
  • Как подключить Font Awesome в Битриксе?

    @targetologru Автор вопроса
    Решение простое: в ядре Битрикса FA версии 4+, а я копировал код для 5 версии.

    Заменил <i class="fas fa-ellipsis-h"></i> на <i class="fa fa-bars" aria-hidden="true"></i>
    Ответ написан
    Комментировать
  • Как задать и получить пользовательские параметры настоек компонента Bitrix в массив $arParams?

    smilingcheater
    @smilingcheater
    Переношу комментарии в ответ.

    Вы точно сохранили файл с подключением этого компонента после изменения его настроек?
    Если посмотреть файл, где вы подключаете компонент, как PHP-код - в нём заданы эти параметры?

    Вы пока только описали эти параметры. Пока вы не сохраните компонент с подключенными параметрами - в $arParams они не попадут. В $arParams попадает только то, что прописано в php-коде.
    Достаточно будет зайти в настройку подключения компонента (то окно, которое у вас в вопросе на 2 скрине) и сохранить его.
    Ответ написан
    Комментировать
  • Как получить $arResult без подключения шаблона?

    @eternalfire
    писать лучше так - https://github.com/ArtamonovDenis/artamonov.api/wiki

    конкретно ваш вопрос то в файле компонента (compnent.php) возвращайте $arResult то есть вместо
    $this->IncludeComponentTemplate();
    пишите
    return $arResult
    Ответ написан
    5 комментариев
  • Как исправить ошибку 2022/01/08 14:42:57 [warn] 20078#20078: *673582 a client request body is buffered to a temporary file?

    martin74ua
    @martin74ua Куратор тега MySQL
    Linux administrator
    а где вы ошибку то увидели?
    во первых - это warn, те. warning
    во вторых - ну буфферизировали ответ вашего сервиса, дальше то что?
    Читайте дальше логи, стоит почитать логи сервиса, а не nginx
    Ответ написан
    Комментировать
  • Почему появляется ошибка?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Это же элементарно! У скрипта нет прав доступа к исследуемому файлу. Проверьте через is_readable().
    Ответ написан
  • Как отправить HTTP запрос методом POST на URL через PHP?

    GeneMoss
    @GeneMoss
    void
    $url = 'http://localhost/post.php';
    $params = array(
        'param1' => '123', // в http://localhost/post.php это будет $_POST['param1'] == '123'
        'param2' => 'abc', // в http://localhost/post.php это будет $_POST['param2'] == 'abc'
    );
    $result = file_get_contents($url, false, stream_context_create(array(
        'http' => array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => http_build_query($params)
        )
    )));
    
    echo $result;
    Ответ написан
    1 комментарий
  • Стоит ли ставит unsigned для полей в MySQL?

    @miksir
    IT
    1. Далеко не все базы умеют unsigned.
    2. Первичный ключ может быть отрицательным, почему нет, можно руками добавить.
    3. unsigned может доставить проблем с языком программирования, у которого нет unsigned типов и такой же размер int.
    4. И самое главное - да пофиг
    Ответ написан
    2 комментария
  • Стоит ли ставит unsigned для полей в MySQL?

    Stalker_RED
    @Stalker_RED
    Сперва вы смотрите непонятно какие уроки, а затем удивляетесь.

    Use the UNSIGNED attribute if possible to allow a greater range.
    © https://dev.mysql.com/doc/refman/5.7/en/example-au...

    Потому, что им лень прописать UNSIGNED? Потому, что сейчас гайды делают даже нубы?
    Или может потому, что не хотят забивать головы новичков лишними подробностями? Вы действительно думаете что ваша база очень скоро превысит 2 млрд записей и вам понадобятся все 4?
    Если да, то вот вам подсказка: с BIGINT можно еще в 4 млрд раз поднять планку.
    Ответ написан
    Комментировать
  • Узнать ID последнего заказа пользователя?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    Правильнее разобраться с классом CSaleOrder.
    первый параметр GetList() это что ?
    и там точно нет 3его или 4го параметра ?
    в методе проверить указана ли явно сортировка?
    а то что товары возвращаются от первого к последнему просто случайность.

    Eсли из цикла просто убрать break, то получите последний.
    Но это если через выше перечисленные вопросы не найдете, как
    заставить метод вернуть только один нужный заказ
    Ответ написан
    Комментировать
  • Узнать ID последнего заказа пользователя?

    @ArmBar
    Так все таки получше будет, запрос с limit побыстрее, чем без него

    $orderData = \Bitrix\Sale\Order::getList([
    	'select' => ['ID'],
    	'filter' => ['=USER_ID' => $USER->GetID()],
    	'order' => ['ID' => 'DESC'],
    	'limit' => 1
    ]);
    if ($order = $orderData->fetch())
    {
    	$lastOrderId = $order['ID'];
    }
    Ответ написан
    Комментировать
  • Узнать ID последнего заказа пользователя?

    это конечно говнокод, т.к. надо править запрос к БД, и там уже задавать условие
    $arFilter = Array(
        "USER_ID" => $USER->GetID(),
    );
    $db_sales = CSaleOrder::GetList(array(), $arFilter);
    $ids = [];
    while ($ar_sales = $db_sales->Fetch())
    {
        $ids[] = $ar_sales['ID']; // сохраняем все id
    }
    $orderId =  $ids[count($ids)-1]; // последний элемент массива
    Ответ написан
    Комментировать
  • Как в php удалить из строки определенные теги? Функция strip_tags удалет все кроме определенных. А мне нужно только определенные. Как это сделать?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Валидных HTML тегов – конечное множество. Их все можно перечислить. Исключить «определенные».

    Потом strip_tags().
    Ответ написан
    2 комментария