Ответы пользователя по тегу PHP
  • Вылезает ошибка 500 при выполнение header("Location: /im"), что делать?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Открываем php_errors на сервере и смотрим.
    Гадать в режиме телепата можно долго.

    PS Это эталонный говнокод.
    Почитайте про MVC хотя бы.
    Ответ написан
    7 комментариев
  • Какой набор пакетов использовать, чтобы реализовать простой веб-сайт?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Disclaimer: я регулярно даю на собеседованиях тестовое задание "сделать что-то без фреймворков", все что написано дальше это моя личная точка зрения.

    Смысл задания в том, чтобы увидеть какие велосипеды будет использовать соискатель, какой код напишет когда не будет жестких рамок навязанных фреймворками.
    Если бы хотели проверить ваше умение гуглить готовое - задание звучало бы "собрать из готовых библиотек".

    Отдельный вопрос - почему вы вдруг хотите использовать внешние пакеты, если у вас нет уже проверенных с чем вы работали ранее?

    По списку:
    1. Роутер: https://github.com/search?q=php+router
    2. Аутентификация пользователей - зачем тут какой-то пакет??
    3. ORM - использование ORM в живом проекте очень холиварно. Скорее всего смысл задания - проверить еще и ваше умение писать запросы руками.
    Ответ написан
    5 комментариев
  • Выбор для backend GO или PHP?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Нагрузку меряют в RPS - requests per second.
    Ваши страшные "20 000 запросов в минуту" превращаются в скромные 300 rps.
    Правильно написанный код на PHP без проблем держит 600-700 rps на одном сервере.

    2. Я скажу честно, я видел очень мало проектов которые упирались именно в производительность скрипта, гораздо раньше все упираются в базу.

    3. В любом случае если у вас реально будет нагруженный проект - есть смысл сразу думать про возможность полноценного горизонтального масштабирования. Это существенно усложняет разработку, но реально решает проблему. Любые пляски вокруг языка, конкретной базы итд - это предтечи вертикального масштабирования, а не горизонтального.

    4. С учетом выше изложенного - абсолютно пофиг на чем писать.
    Go - стильно, модно, вакансий очень мало, требования в них высокие - но з.п космические.
    PHP - все прямо наоборот, вакансий море, требования не высокие, з.п... разные.
    Как менеджер, я для проектов выбираю PHP. Что выбрать вам - дело дальнейших ваших планов.
    Ответ написан
    Комментировать
  • В PHP 7 не работает mysqli_fetch_all($query, MYSQL_ASSOC); Чем заменить?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    таки 2й аргумент должен называться MYSQLI_ASSOC
    Ответ написан
    1 комментарий
  • Как сделать вывод и добавление записей в БД, в реальном времени?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Гипотетически можно и через ajax, но в целом нет т.к сайт ляжет уже на очень небольшом количестве живых пользователей.
    Правильное решение - использовать веб.сокеты.

    Есть отличная готовая библиотека для node.js https://socket.io/
    Для PHP можно изобрести велосипед, но проще поднять отдельный микросервис на node.js который будет заниматься рассылкой этих событий.
    События в него пихать через redis / rabbitmq какой-нибудь, а основной проект уже писать на том языке на каком хотите.
    Ответ написан
    4 комментария
  • Как связать одну админку и 40-к поддоменов для редактирования контента?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    А в чем проблема то?
    Берите и делайте.

    Можно чуть по подробнее пожалуйста, чет вообще не понял (
    а именно - В зависимости от поддомена выводить нужный контент.

    Ну смотрите на URL, парсите его, выделяете идентификатор города - дальше уже фильтруете данные из базы какие вам нужны.
    Ответ написан
  • Блокируются запросы к курсам валют?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Либо вас заблочил cbr-xml-daily, либо ваш шаред хостинг ввел ограничения на внешние запросы.

    А вообще есть официальный API цбр, не понимаю зачем нужен какой-то ресурс посредник:
    www.cbr.ru/scripts/XML_daily.asp
    Ответ написан
  • Есть функция, как "заставить" эту функцию вывести строку в echo?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Можно в режиме телепата гадать 100500 раз о том что происходит.
    По факту вопрос слишком абстрактный, научитесь дебажить код.
    Идеально было бы поставить xdebug и ide которая умеет с ним работать, но на крайний случай вас спасут print_r и var_dump.
    Прямо с начала, берете, и для каждой строчки по очереди проверяете - те ли данные вам пришли, что вы ожидали, те ли строки сформировались что вы ожидали, итд.
    это собственно и есть - работа программиста.


    По теме вопроса: раз echo ничего не выводит - значит там ничего нет, магии не бывает.
    (и кстати опять же в режиме телепата - у вас скорее всего выключен вывод нотисов)

    Причин почему там ничего нет - может быть море:
    - curl_exec($curl) может вернуть не строку, а false, и в функции curl_error($curl) будет текст ошибки.
    - curl_exec может вернуть строку в которой нет json
    - curl_exec может вернуть строку в которой есть json, но в нем структура какая-то не такая как вы ожидаете (например ошибка или еще что-то)

    Повторюсь, магии не бывает. Если что-то не работает, нужно идти по шагам и дебажить дебажить дебажить.
    Ответ написан
  • Как собрать массив?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Рискну предположить что вы хотите что-то типа php.net/manual/en/function.compact.php
    Ответ написан
    Комментировать
  • Конкатенатор php файлов в стиле препроцессора си. Есть такой?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Сам не пробовал, но может быть посмотреть в сторону php.net/manual/ru/book.phar.php ?
    Там даже в комментах есть кусок кода который собирает phar из папки с исходниками.
    Ответ написан
    Комментировать
  • Почему не работает фильтр?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Ладно, отвечу серьезно.

    По поводу самой проблемы:
    Можно в режиме телепата гадать 100500 раз о том что происходит.
    По факту вопрос слишком абстрактный, научитесь дебажить код.

    Конкретный пример: у вас есть ваш "код фильтрации".
    Идеально было бы поставить xdebug и ide которая умеет с ним работать, но на крайний случай вас спасут print_r и var_dump.
    Прямо с начала, берете, и для каждой строчки по очереди проверяете - те ли данные вам пришли, что вы ожидали, те ли строки сформировались что вы ожидали, итд.

    Скорее всего вы поймете в чем проблема сами.
    Даже если не поймете - сможете задать уже конкретный вопрос.
    Ну и хорошо бы вывод всех ошибок и нотисов включать.
    <?php
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);


    Теперь в целом по коду:
    1. Почитайте про MVC. mysqli функции вперемешку с html версткой - недопустимы.
    2. Вынесите всю работу с базой в отдельную либу. есть 100500 готовых решений на гитхабе.
    sql connect в filterTable - очень плохо.
    3. В базу нельзя отправлять user input без обработки! Как минимум нужно делать mysqli_real_escape_string
    4. За запрос where concat(`fullName`, `group_name`) = ... в реальном проекте, увольняют сразу. Запрос не использует индексы и должен для каждой строки таблицы выполнить объединение 2х полей, а потом еще и сравнить. Это дико медленно.
    Нужна такая строка для поиска - собирайте её отдельным полем в базе.
    Ответ написан
  • PHP. Как очищать массив цикле?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    while($row = $STH->fetch()) {
    это цикл по всем кортежам ответа.
    сразу после этой строчки добавьте
    $test = [];
    Ответ написан
    1 комментарий
  • Telegram, php как написать алгоритм пагинации?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Вы добавляете данные в buttons на итерации когда количество элементов в $one_row == вашему количеству колонок (в частном случае 2).
    Соответственно если у вас данных некратное число - то остается огрызок.
    Очевидное решение - после цикла проверять что лежит в $one_row и если нужно - сохранять.
    $columns = 2;
    
    $buttons = [];
    $one_row = [];
    while ($row = mysqli_fetch_assoc($result)) {
        $one_row[] = [
            "text" => $row["test"],
            "callback_data" => "test"
        ];
        if (count($one_row) == $columns) {
            $buttons[] = $one_row;
            $one_row = [];
        }
    }
    if (count($one_row) > 0) {
        $buttons[] = $one_row;
    }
    Ответ написан
    Комментировать
  • Как получить аргумент команды?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Парсите то что вам приходит через php.net/manual/ru/function.preg-match.php
    Ну или заюзайте какой-нибудь фреймворк для ботов.
    Ответ написан
    Комментировать
  • Как сделать так, что бы не выбрасывало ошибку, когда я не указал один из аргументов функции?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    там бывают такие моменты, когда например нужно указать только $user_id или только $chat_id

    Не забываем про SOLID - если у вас есть функция для которой достаточно только $user_id - у неё и должны быть в аргументах только $user_id

    Формальный ответ на вопрос: или так как написал sidni или если много аргументов что-то в стиле
    function func(array $options) {
      return $options['user_id'];
    }
    
    echo func( ['user_id' => '111'] );


    но тут легко запутаться в переменных и в итоге вы придете к
    trait init {
        function __construct(array $data) {
            foreach ($data as $key => $value) {
                if (property_exists(__CLASS__, $key)) {
                    $this->$key = $value; 
                } else {
                    throw new \Exception($key . ' undefined');
                }
            }
        }
    }
    
    class FuncOptions  {
        use init;
        public $user_id;
        public $chat_id;
    }
    
    function func(FuncOptions $options) {
      return $options->user_id;
    }
    
    echo func(new FuncOptions(['user_id' => '111']) );


    а там откроете для себя фабрики и прочие паттерны...

    так что лучше пишите простые и понятные функции))
    Ответ написан
    Комментировать
  • Вывести кто онлайн через базу данных?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Сессии вообще про другое.

    Общая логика в таких случаях: заводим юзеру в табличке поле с datetime последнего действия на сайте.
    (Под действием понимаем в простом варианте - запрос любой страницы)
    Соответственно обновляем это поле.
    Все юзеры у кого время последнего действия > (now - nn секунд) считаются online.

    Для гостей, если нужно по честному считать - скрыто регистрируем каждого, ставим вечную куку с авторизацией и далее как для авторизированых.
    Ответ написан
    Комментировать
  • Добавить данные в mysql в цикле?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    your_uncle такое ощущение что вы не пробовали читать свой собственный код.
    при чем тут тексты запросов?
    Команда mysqli_query($link, $query) отправляет $query на исполнение.
    Все что было записано-перезаписано в $query до этого абсолютно не важно.
    Важно только что там хранилось конкретно в момент вызова mysqli_query.

    вам нужно вместо строчки print_r($arr); поставить mysqli_query и все будет работать (разумеется если у вас правильная структура таблицы, итд)
    Ответ написан
    1 комментарий
  • Как вывести информацию?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Ну как бы все абсолютно логично.
    Вы вызываете функцию page_about_details, которая возвращает false (не понятно зачем кстати, но да ладно).
    В любом случае, переменные img, descr, keyws объявлены внутри этой функции и соответственно не определены снаружи.

    Если вам нужны какие-то данные из этой функции - формируйте структуру и отдавайте её в ответе.
    Ответ написан
  • Много foreach это нормально?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Логику поиска лучше выносить в sql
    2. Там где можно использовать встроенные функции - лучше использовать встроенные функции.
    3. Цикл что-бы что-то вывести - это нормально. Плохо делать запросы в sql в цикле
    Ответ написан
    Комментировать
  • Сервис онлайн-перевод нового синтаксиса в устаревний, php?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Здравый смысл говорит что нет, т.к

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

    b) в целом эта задача никому не нужна: в проекте используется какая-то конкретная версия php + периодически решается вопрос "как адаптировать старый код к новой версии php" (ну или не решается хе-хе).

    Я честно старался придумать ситуацию кому может понадобиться запускать код написанный под новую версию на старой - додумался только до легаси проекта, который хочет пользоваться плодами опенсорс, но не может.
    Что ж, тут пришло время обновлять свой код до актуальных версий языка.
    Ответ написан
    Комментировать