Задать вопрос
  • Почему nginx отдает php файл на закачку?

    @alex1478
    Нужно указать, что php файлы нужно не отдавать, а передавать на выполнение php-fpm
    https://wiki.debian.org/ru/nginx/nginx+php-fpm
    Ответ написан
    Комментировать
  • Странно стал вести себя composer?

    glaphire
    @glaphire
    PHP developer
    На офф. сайте композера есть инструкция, как с этим бороться. Возможно что что-то сбилось в реестре или поменялись пути или права на папки, связанные с композером и проектом. Поищите на stackoverflow вопросы с этой ошибкой, там много вариантов и наверняка один из них подойдет для решения.
    Ответ написан
    Комментировать
  • Как проверить переменную, содержит ли она вначале заданное число?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Добрый час, M4xwell.

    Ваш $phone всегда нормирован?
    Телефон может записываться совершенно различными способами (+7926..., +7(926)..., 8926, 8(926), 8 926)

    Предположим, что да. В таком случае, $phone содержит 11 символов, начинающихся на "89".
    План прост:
    1. Формируем массив искомых значений (предполагаю, что все они по 4 символа).
    2. Выделяем из $phone первые четыре символа с помощью метода substr и записываем в $phoneCode
    3. Ищем совпадение $phoneCode в массиве искомых значений с помощью метода in_array.

    <?php
    $successCodes = ["8909", "8961", "8900"]; //Наполнить на свое усмотрение
    $phone = "89091234567" // Заполняется динамически, в соответствии с вашей логикой приемки параметров
    $phoneCode = substr($phone, 0, 4);
    if (in_array($phoneCode, $successCodes)) {
      echo "Успех";
    } else {
      echo "Неудача";
    }

    Вполне допускаю, что вам потребуется модифицировать перечень допустимых кодов.
    В этом случае, я рекомендовал бы вам положить значения в отдельную таблицу БД и искать уже в таблице БД совпадения с кодом.

    Если параметр $phone приходит от пользователя в произвольном виде, вам необходимо будет его нормализовать или валидировать.

    Также, приведенный здесь код не оформлен отдельным методом, что было бы целесообразно при организации кода вашего приложения с целью предоставления вам свободы выбора подхода к организации кода.

    С уважением,
    Олег Раев
    CIO of Athanor
    Ответ написан
    5 комментариев
  • Как по красоте выбрать из массива?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как справедливо замечает тов. Дмитрий, это прекрасная задача для того, чтобы начать, наконец, осваивать азы программирования.
    Нам надо пройти по массиву c помощью оператора foreach, сравнивая значение элемента "а" с переменной $max, с помощью функции max(). Если а больше, то присваиваем переменной $max значение "a", а переменной $max_key - значение ключа.
    В итоге на выходе из цикла в $max_key у нас будет искомый ключ
    Ответ написан
    2 комментария
  • Как заменить по шаблону значения, которые находятся в другом массиве?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Поделюсь куском кода, из класса, который сам использую в одном из проектов (это не готовый код для использования, а просто пара методов, вырезанная из контекста, но это может дать представление о том как решаются такие задачи)
    /**
         * Производит заливку шаблона значениями из массива
         *
         * Литералы шаблона вида {<liter_1>.<liter_2>...} будут заменены на соотвествующие значения из массива
         * $data[<liter_1>][<liter_2>]...
         *
         * @param $template Шаблон, содержащий литералы
         * @param $data Массив значений для подстановки
         * @return string Преобразованная строка
         */
        public function fill_template($template, $data)
        {
            preg_match_all('/\{([A-Za-z0-9_\.]+)\}/u', $template, $match);
            list($snippets, $fillers) = $match;
            
            if (!empty($snippets)) {
                
                $fillers = array_map(function($filler) use ($data) {
                    $keys = explode('.', $filler);
                    return $this->array_find($keys, $data);
                }, $fillers);
                
                return strtr($template, array_combine($snippets, $fillers));
                
            }
            
            return $template;
        }
        
        /**
         * Рекурсивно ищет значение в массиве в порядке обозначенным $keys
         *
         * @param array $keys Массив ключей в порядке поиска их в массиве
         * @param array $data Массив значений для поиска
         * @param string $default Значение по умолчанию, если нет соответствующего значения в массиве
         * @return mixed
         */
        public function array_find($keys, $data, $default = '')
        {
            if (!is_array($data) || empty($keys)) return $data;
            
            $key = current($keys);
            return (isset($data[$key]))
                ? $this->array_find(array_slice($keys, 1), $data[$key], $default)
                : $default;
        }


    $user = [
        'id' => 1,
        'name' => 'Ivan Ivanov',
        'role' => 'developer',
        'salary' => 100
    ];
    
    fill_template('/api/items/{id}/{name}', $user); // /api/items/1/Ivan Ivanov


    upd: соответственно под свой шаблон нужно поменять строку
    preg_match_all('/\{([A-Za-z0-9_\.]+)\}/u', $template, $match);


    upd2: Занудам: Да, я знаю про array_shift. :)
    Ответ написан
    3 комментария
  • Поможете оценить Интернет-магазин (MVC) на PHP?

    daemonhk
    @daemonhk
    ПсиХоПат
    Ну а теперь, собственно, по коду...

    1. Работать напрямую с $_POST в контроллерах то еще извращение, появится новое поле вы в контроллер полезете во все 100500 функций? Подсказка - используйте модель для этого.
    2. Обрабатывать получаемые данные от пользователя, делая их более безопасными? Не, не слышал.
    3. Функция mail отключена на многих хостингах.
    4. Создавать новый экземпляр почтовика, передавая ему данные и шаблон письма? Тоже не слышал.
    5. const DEFAULT = 6; - волшебное число, лучше передавать его при создании экземпляра модели.
    6. getAvailabilityText() просто улыбнуло)))

    Как говорится, лень разворачивать проект, но я на 99% уверен, что кроме стандартного CRUD там ничего нет. А сайты это не только эти ваши новомодные MVC, RBAC, Singleton и прочая хрень. В первую очередь это решение проблем конечного потребителя. Хотя да, на кой нам это надо, мы же играем в "выучи фрейм за неделю и начни получать штуку баксов ежедневно"...

    В общем, удачи вам))
    Ответ написан
    1 комментарий
  • Почему не получается парсить баланс своего яндекс кошелька?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Хм. PHP-скрипт на некоем сервере парсит главную страницу с сайта yandex.ru? С новостного сайта? Нет, не с сайта денег money.yandex.ru, а именно с новостного?

    При этом PHP-скрипт сначала ДОЛЖЕН сделать полноценный вход/login на сайт с именем/паролем, сохранить cookies авторизации, и потом с этими cookies обращаться на сайт - только тогда ему будет корректно показан его денежный аккаунт. У вас ничего этого в скрипте НЕТ.

    ИТОГО: Изучайте вопрос, переделывайте скрипт.

    P.S. Сделайте вывод всей страницы, полученной с yandex.ru - и увидите, что данных о деньгах там нет, от слова "вообще". Либо я катастрофически не прав.
    Ответ написан
    1 комментарий
  • Как устранить ошибки и установить drupal8 в LAMP на Ubuntu?

    Oxyd
    @Oxyd
    Linux enthusiast

    The directory sites/default/files does not exist. An automated attempt to create this directory failed, possibly due to a permissions problem. To proceed with the installation, either create the directory and modify its permissions manually or ensure that the installer has the permissions to create it automatically. For more information, see INSTALL.txt or the online handbook.


    Каталог sites/default/files не существует. Попытка автоматического создания каталога провалилась, верятно из-за проблем с правами. Для продолжения инсталляции, создайте каталог и модифицируйте права вручную или выдайте права инсталлеру для создания папки автоматически. Для более подробной информации откройте файл INSTALL.txt или онлайн хэндбук.


    Settings file
    The Settings file does not exist.


    Файл настроек не найден.


    The Drupal installer requires that you create a ./sites/default/settings.php as part of the installation process. Copy the ./sites/default/default.settings.php file to ./sites/default/settings.php.


    Инсталлятор друпал нуждается в файле ./sites/default/settings.php как часть процесса инсталляции
    Скопируйте файл ./sites/default/default.settings.php в ./sites/default/settings.php.


    More details about installing Drupal are available in INSTALL.txt.


    Больше подробностей по поводу инсталляции друпал доступо в файле INSTALL.txt
    Ответ написан
    Комментировать
  • Стоит ли изучать front-end с нуля в 2020?

    Maxim_Baturo
    @Maxim_Baturo
    Могу сказать свое мнение, мнение человека, начавшего изучение front-enda полгода назад.
    Стоит начинать только, если у тебя самого есть огромнейший интерес с этому. Если тебе нравится этим заниматься. Начинать ради денег - нет, не стоит.За полгода изучения я ничего не добился в финансовом плане. Конечно, я учился не особо усердно, но поверь, учиться не так легко из-за скуки.
    Если все-таки решишь начать учить, дам совет. Потрать неделю-месяц на четкий, продуманный до мельчайших деталей план развития, посмотри материалы по этой теме. Очень важная ветвь, на мой взгляд.

    Я написал только свое мнение и свой опыт, полученный за только мою жизнь.
    Ответ написан
    3 комментария
  • Получить массив из бд и вывести в цикле Wordpress PHP?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    При таком запросе
    $results_rating = $wpdb->get_col("SELECT * FROM $table_name");


    $results_rating - будет содержать массив вида
    [10,11,12,13,14,15]

    Соответственно обращаться к нему как к объекту это ошибка $post_id= $rowes->id;

    при таком переборе массива foreach ($results_rating as $rowes)
    справедливо такое
    $post_id = $rowes

    кроме того, в случае перебора как у вас $post_id всегда будет равно значению последнего элемента массива, так так каждая итерация его переопределяет т.е. ваш перебор равен выражению
    $post_id= end($results_rating)
    Ответ написан
    7 комментариев
  • Как преоброзовать дату из базы mysq в php?

    @Byte255
    Пишу на PHP за еду
    date('Y-m-d H:i:s', 1611823382);
    Ответ написан
    Комментировать
  • Как сделать несколько воркеров на одну задачу?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самый простой и по рабоче-крестьянски наивный способ - создать один общий для всех воркеров файл и ставить на него эксклюзивную блокировку (flock LOCK_EX) в момент взятия из очереди. Например, пусть у задачи есть поле proc_status, которое имеет значения NEW, RUNNING, FINISHED, FAILED. Тогда ставим блокировку, берём из базы задание в статусе NEW, делаем update set proc_status='RUNNING' и снимаем блокировку - никто другой одновременно с нами ту же задачу не возьмёт. Финальный статус можно ставить без блокировки.

    Вместо блокировки файла можно использовать блокировки в самой базе, если они там есть (с Mongo не имел дела).

    Ещё один не менее простой способ - распределять задачи по идентификаторам. Например, пусть у нас N воркеров, тогда пусть воркер k (где k=0...N-1) обрабатывает только те задания, где id%N=k.

    В общем, способы есть.
    Ответ написан
    Комментировать
  • Как проверить язык?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    на клиенте


    на сервере

    $data = …
    if (!preg_match('/[а-яА-ЯёЁ]+/', $data)) {
      // error
    }
    Ответ написан
    1 комментарий
  • Как проверить язык?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пишешь в адресной строке своего браузера php только русские буквы

    Все-таки пора уже вводить в начальной школе предмет "поиск в интернете".
    Ответ написан
    Комментировать
  • Как правильно оформить экранирование в запросе к mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Про кАвычки при работе с БД надо ЗАБЫТЬ НАВСЕГДА.
    И всегда использовать только вопросительный знак.

    $stmt = $connect_bd->prepare("INSERT INTO `oc_testtest`(`name`) VALUES (?)");
    $stmt->bind_param("s", $name);
    $connect_bd->begin_transaction();
    foreach($data as $chunk){
        foreach($chunk as $row){
            if ($row['name']) {
                $name = $row['name'];
                $stmt->execute();
            }
        }
    }
    $connect_bd->commit();
    Ответ написан
    Комментировать