Задать вопрос
Ответы пользователя по тегу PHP
  • Как заставить принтер(ы) печатать с удаленного сервера?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Так и не понял. Компьютер у вас клиент или так же сервер.
    Просто как вы из сервера собрались стучать в клиент? Вы в клиент можете только отдать от сервера.

    В вашем случае я бы сделал бы так.
    Поставил open server или что-то подобное.
    Написал бы скрипт, который время от времени дергал бы крон.
    А сам скрипт обратился бы к командной строке и отправил бы на печать документ.
    Остаётся лишь решить, сервер в той же сети или вообще где-то в дата центре. Если в дата центре, то open server вам точно не подойдёт.
    Вам тогда нужно будет самому настроить всё вручную и вам нужно будет что-то решить с Ip адресом.

    И так. Подведем итог.
    1. Вам нужен веб сервер на компьютере, к примеру apache, nginx, lighttp.
    2. Вам нужен php для windows
    3. Вам нужны функции php типо system() или exec()
    4. Вам нужен крон или подобный инструмент.
    5. вам нужно написать маленький api, сервер который будет вызывать и отправлять на печать.
    6. Вам нужно решить проблему с динамическим ip, если сервер с линуксом где-то в дата центре.
    7. Если сервер в локальной сети, то вопрос динамическим ip отпадает. в этом случае вы можете поставить на компьютер open server или подобный инструмент.
    Ответ написан
  • Как лучше реализовать проверку передачи данных в api?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Лично я сделал бы для каждого поля throw new Exception
    таким образом я сам лично буду контролировать каждую кинутую ошибку.
    Если вы хотите сократить количество throw new Exception, то объедините в в один if все поля, но тогда у вас отпадает возможность указать, кто не заполнен.
    Далее, когда вы будете вызывать метод, используйте один try catch для всех методов, выполняющие что-то в одном контроллере.
    Ответ написан
    Комментировать
  • Авторизация PHP. Как исправить Warning: Undefined array key "login" in?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    У вас походу php 8.

    Ошибка говорит, в $_POST login не существует. вы пытаетесь обратиться к ключам, которых нет.
    1. Проверяйте, отправляется ли форма.
    2. Если форма отправлена, попробуйте выводить $_POST['login'] в echo.
    3. Если в echo будет результат, тогда вам нужно подавить ошибку, но это не самый лучший вариант.
    4. Нужно убедиться в том, что отправляется действительно форма, а не json данные.
    5. Если вы отправляете форму через js, нужно проверить, не конвертируете ли вы её в json.
    6. Если вы отправляете форму как json данные, тогда $_POST будет всегда пуст. Вам нужно будет обратиться к php://input.

    Помните, подавление ошибок не всегда выход из ситуации.
    Ответ написан
  • Изучение php с нуля для верстальщика?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    1. не смешивайте фронт с php.
    2. php как back-end.
    3. понимание rest-api

    если вы выполняете три этих пункта, то будет вам счастье.
    начните изучать php. пробуйте скрипты на нём писать, а потом создайте приложение rest-api и совместите с вашим фронтом
    Ответ написан
    Комментировать
  • Почему PHP выполняет математические операции неправильно?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    На сколько я помню, эта проблема не с php, эта проблема со всеми языками программирования.
    Там что-то связано с процессорами и памятью.
    Ответ написан
  • Устанавливать ли в php таймзону пользователя?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Когда я начинал изучение языков программирование, ко мне пристала одна проблема, из-за которой мне говорили, что я полный нуб.
    Я время, в базе, хранил как метку в секундах, да и до сих пор так делаю. А если надо в человеко-понятный уровень превратить, так в PHP есть date(), и в js new Date()
    А когда хранят в базе что-то подобное 2025-01-31t12:55:43, то это какой-то мрак.
    Конечно, такой подход убирает сложность работы с датами, но я люблю, когда дата представлена как 31 янв 12:55, причем год должен появиться только тогда, когда нынешний и в дате сохранения не совпали.
    Да, это лишняя обработка на фронте, но ведь красиво же и еще доступней для пользователей.

    А теперь к сути вопроса.
    1. Сервер должен иметь постоянный часовой пояс. Клиенту отправлять даты именно в этом часовом поясе. Я бы выбрал нулевой пояс. Просто мне проще в голове представлять как отнимать или прибавлять.
    2. На клиенте обрабатывать данные и выставлять часовой пояс соответствуя данным из браузера.
    3. Если такая настройка есть, чтобы пользователь изменил часовой пояс, то тут должен произойти просто пересчет и всё.
    У вас, на клиенте, должен быть объект js, который должен хранить некоторые глобальные настройки аккаунта, которые должны всегда загружаться вместе со страницей.
    Ответ написан
    23 комментария
  • Как правильно вывести session, чтобы все работало как надо?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Если вы указали session_start() далее заполняйте сессию информацией на основе того, что у вас есть.
    к примеру, подтягивайте данные из базы или ещё какого-то источника.

    Однако, это просто рекомендация.
    1. Не смешивайте php с html. Разделите фронт и бэкэнд.
    2. Откажитесь от сессий, куки будут лучше. Особенно это станет заметно, если вы какой-то конвертор файлов сделаете.
    Ответ написан
    5 комментариев
  • Как отправить HTTP на локальный сервер?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Советую к fetch добавить тип который хотим получить и получить данные, что-то типо
    fetch("http://localhost:8080",{
    /* тут данные */
    }).then((response) => {
    if (!response.ok) {
    throw new Error("error");
    }
    return response.json();
    }).then((data) => {
    console.log(data);
    }).catch();


    в php делаем это.
    <?php
    $content = file_get_contents("php://input");
    echo $content;
    ?>

    В console.log появится результат который вы отправили. Это позволит вам узнать, отправляются ли данные на сервер. И лучше делать форму, на нее вешать событие submit и отменить поведение по умолчанию.
    Ответ написан
    Комментировать
  • Имеет ли смысл разбирать чужие сложные скрипты для самообучения?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Да нужно. Хотя бы понимая, что говнокодить нельзя.
    Ответ написан
    Комментировать
  • Как значения из одного массива преобразовать в другой массив?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Самое банальное, при помощи цикла и функции explode
    Ответ написан
    Комментировать
  • Как передать параметры настройки php при связке apache+php-fpm?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Вот что ответил chat gpt.
    Когда Apache работает в режиме mod_php (например, с mpm_prefork), параметры PHP можно настраивать напрямую в конфигурации виртуальных хостов с помощью директив php_admin_flag и php_admin_value. Однако, когда используется php-fpm в связке с многопоточным MPM (например, mpm_worker или mpm_event), PHP запускается как отдельный процесс, и Apache передает запросы через FastCGI. В этом случае директивы Apache, такие как php_admin_flag и php_admin_value, больше не работают.
    Чтобы задать отдельные настройки PHP для каждого виртуального хоста при использовании Apache с php-fpm, можно воспользоваться следующими подходами:
    1. Использование .user.ini
    PHP поддерживает использование файлов .user.ini для переопределения определённых настроек на уровне директории. Вы можете создать файл .user.ini в корневой директории каждого виртуального хоста и добавить в него настройки, которые вы хотите изменить. Например:
    /var/www/example.com/.user.ini
    ini
    Копировать код
    memory_limit = 512M
    max_execution_time = 300
    upload_max_filesize = 1024M
    post_max_size = 1024M

    Примечание: Убедитесь, что в файле php.ini включена директива user_ini.filename, и она указывает на имя файла .user.ini.
    2. Настройка PHP-FPM пула для каждого VirtualHost
    Вы можете создать отдельные пулы для каждого виртуального хоста в конфигурации php-fpm. В конфигурации каждого пула можно задать свои параметры PHP.
    Создайте новый конфигурационный файл пула, например, /etc/php-fpm.d/example.com.conf:
    ini
    [example.com]
    user = apache
    group = apache
    listen = /var/run/php-fpm-example.com.sock
    listen.owner = apache
    listen.group = apache
    pm = dynamic
    pm.max_children = 10
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    php_admin_value[memory_limit] = 512M
    php_admin_value[max_execution_time] = 300
    php_admin_value[upload_max_filesize] = 1024M
    php_admin_value[post_max_size] = 1024M

    После этого в конфигурации виртуального хоста Apache пропишите использование соответствующего пула:
    apache
    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot /var/www/example.com
    
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/var/run/php-fpm-example.com.sock|fcgi://localhost/"
        </FilesMatch>
    </VirtualHost>

    3. Использование SetEnv и .htaccess
    Если вы хотите использовать переменные окружения для передачи настроек PHP, можно использовать директиву SetEnv в конфигурации виртуального хоста Apache. Затем в php-fpm можно настроить обработку этих переменных.
    Пример для Apache:
    apache
    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot /var/www/example.com
    
        SetEnv PHP_VALUE "memory_limit=512M
        max_execution_time=300
        upload_max_filesize=1024M
        post_max_size=1024M"
    </VirtualHost>

    Резюме
    Наиболее гибкий и мощный способ управления настройками PHP при использовании php-fpm — это создание отдельного пула для каждого виртуального хоста. Этот подход позволяет точно настраивать параметры PHP для каждого сайта или приложения, а также эффективно управлять ресурсами сервера.
    Ответ написан
    2 комментария
  • Как передать путь к файл через $_GET?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Возможно get данные нужно пропустить через urlencode
    Ответ написан
    Комментировать
  • Как узнать, какой день недели был 100 дней назад?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Я бы сделал на mktime. где указывается число, минуснуть на 100 и получим секунды того дня. Дальше взять date() поставить w и поставить секунды из mktime во-второй аргумент.
    <?php
    $mktime = mktime(12,00,00,8,8-100,2024);
    echo date("w",$mktime);
    ?>
    ?>
    Ответ написан
    Комментировать
  • Как получить имя переменной из строки?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Имена переменной можно задавать через $$.
    К примеру
    $str = "str555";
    $$str = "hello";
    echo $str555; // выводит hello
    Ответ написан
  • Как записать в базу пустое поле?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Так вроде как в новых версиях mariadb и mysql запрещено пустые поля делать. Можно NOT NULL, NULL или DEFAULT
    Ответ написан
  • В чем может быть проблема у простого php-роутера?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    В моем htaccess есть такой код.

    RewriteEngine On
    # Не применять к существующим файлам файлам
    RewriteCond %{REQUEST_FILENAME} !-f
    # Не применять к существующим директориям
    RewriteCond %{REQUEST_FILENAME} !-d
    # Редирект всех запросов на index.php
    # L означает Last, нужен чтобы на этом этапе mod_rewrite сразу остановил работу.
    # Короче, небольшое увеличение производительности.
    RewriteRule .* index.php [L]


    Далее, в моем роуторе я обращаюсь через $_SERVER['REQUEST_URI']
    Разбиваю его на части.
    К примеру у меня есть два адреса.
    site.ru/blog/one-day
    site.ru/de/blog/one-day
    Все что разделено косыми чертами, я отдал на откуп explode.
    Роутору объяснил, что нулевой может иметь два значения и он это должен учитывать. Если в нем храниться только две буквы и не более, тогда он должен привести нас в изменение языка интерфейса. Если букв больше, тогда он должен привести нас в модуль, который мы хотим вызвать.
    Если модуля нет, тогда нужно отправить пользователя на 404, но в моем случае я отправляю пользователя на главную.
    Причем я делаю проверку не только на существование каталога для модуля, но и на существование некоторых файлов.
    А $_GET параметры передаются автоматически и их не нужно обрабатывать.
    site.ru/blog/one-day?page=comments&sort=desc
    $_GET параметры сами подставятся как положено и их не нужно прогонять через роутер.
    Аааа, простите, забыл добавить, что у меня есть второй explode, который в самом начале разделяет строку через знак ?

    Мой файл имеет размер в 3.2 kb и 48 строк.
    Но это только лишь из-за развернутых комментариев, которые я писал для себя, чтобы не запутаться.
    Да, в таком роуторе должен быть метод, который пошлет куда подальше пользователя, если он будет безобразно вводить адрес сайта.
    К примеру, у вас есть материал по адресу
    site.ru/blog/one-day, но после one-day ничего нет, то тут должна сработать защита, которая просто прогонит пользователя на главную или подготовленную страницу для таких случаев.
    Я реализовал это таким способом.
    Есть метод error404(), который принимает номер элемента, после которого должна произойти остановка.
    site.ru/blog/one-day
    Только два элемента и третьего нет, тогда я вызываю метод error404(2) и все что будет введено после one-day, сработает остановка.
    site.ru/blog/one-day/photo/city-berlin
    error404(4) Все что больше четыре, сработает остановка.

    Как-то так. А если на регулярках решать данную задачу, мне кажется это еще более нагружать сервер, да и казусы могут всякие быть.

    Простите за такой длинный комментарий.
    Это чисто мой велосипед и никого не призываю им пользоваться.
    Ответ написан
    Комментировать
  • Как заставить php скрипт корректно работать?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Использовать функцию mb_substr и в ней указать кодировку для японских символов.
    Ответ написан
    1 комментарий
  • Не работает php код?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Перед session_start, а так же перед header() - не должно ничего выводиться. Если вы будете что-то выводить, это сразу выводит ошибку. Подумайте над другим вариантом, как пользователю сообщить, что логин занят.
    Ответ написан
  • Как удалить сессию при закрытии вкладки/окна браузера?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Могу лишь предложить такую логику. Нужно поставить жизнь сессии пять минут. Каждый раз, пока пользователь на сайте, будет обновляться жизнь сессии. Когда пользователь закроет вкладку или окно, то сессия больше обновляться не будет. Соответственно она удалится.
    Ответ написан
  • Как отловить ошибку Parse error: syntax error, unexpected end of file in page-hub.php on line 328?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    У меня такое было. Проблема почему-то была в таком коде.
    <?php
    if (1==1) {
     echo "Да, числа ровны";
    }
    else echo "Нет, не ровны";
    ?>

    Добавил скобки и проблема исчезла, хотя на windows такой проблемы не было.
    Ответ написан
    Комментировать