За последние 24 часа нас посетили 18159 программистов и 1606 роботов. Сейчас ищут 930 программистов ...

Как передать данные в PHP через консоль Debian 12

Тема в разделе "PHP для новичков", создана пользователем KNS, 21 дек 2024.

Метки:
  1. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Подготовка сервера к переносу сайта, остановилась на одной функции, а именно передача данных из ПХП в ПХП через консоль (командную строку)

    На рабочей системе (Centos7), уже всё старенькое стало, и развивать без современных инструментов просто бесполезная трата времени.
    Новый сервер ОС Debian12.

    Комментарий почившего программиста следующий:

    Код (Text):
    1. #!/usr/bin/env php
    2. <?php
    3. error_reporting(E_ALL);
    4. ini_set('display_errors', 1);
    5.  
    6. //error_reporting(E_ALL);
    7. //ini_set('display_errors', TRUE);
    8. ini_set('display_startup_errors', TRUE);
    9.  
    10. // Импорт данных в "Личный кабинет".
    11. // Пакетный режим. Задание и ход выполнения в таблице calc.
    12. //
    13. // Каждый импортируемый файл сначала конвертируется к одному или нескольким "стандартным" .csv файлам,
    14. // а затем "стандартные" файлы импортируются в ЛК согласно схеме загрузки.
    15. //
    16. // В командной строке передаётся путь к файлам конфигурации, номер очереди, имя модуля и имена загруженных файлов
    17. if ($argc < 5) exit; // upload.php conf job module file1 [file2 ...]
    18. //
    19. .......

    В общем, не подключается похоже в Debian12,
    Строку #!/usr/bin/env php
    менял по разному, пытаясь подключить ПХП
    У нового сервера в этом куча мест с симлинками, которые приводят все к
    #!/usr/bin/php8.2

    Прочитал https://qna.habr.com/q/205194?ysclid=m4yim9osxv2455225
    Парни пишут что нужно права давать на файл, который запускает,
    Но пока не получилось, даже не пробовал права давать...
    Подключаемые файлы 7 штук, из них 2 имеют разные адреса, Например:
    #!/usr/bin/env php или #!/usr/local/bin/php
    Чем эти записи отличаются по функциям?
    /usr/bin/env php здесь есть файл env, и симлинк на /usr/local/bin/php

    Что делает env?
    Просветления пока не случилось,... решил вам написать.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    что к чему не подключается? все сумбурно
    строка 17
    PHP:
    1. if ($argc < 5) exit;
    вообще должна ошибку выдать, что $argc не определена

    ну и похоже у вас php не настроен или настроен но не так как на предыдущем сервере...
    первую строку поменяйте на
    !/usr/bin/php8.2 php
     
  3. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    $argc не системная, в ПХП выключено расширение сознательно...


    update-alternatives --config php показал что там:

    * 0 /usr/bin/php.default 100 auto mode
    1 /usr/bin/php.default 100 manual mode
    2 /usr/bin/php8.2 82 manual mode
    по этому пробовал по всякому, ....

    Стоит панель IspManager, в поддержке хостинга сказали что не поддерживается установка для альтернативных пакетов ПХП.
    А проект сначала на ПХП 7.0 нужно перевезти на новый сервер. :(
     
  4. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Ещё один вопрос по теме:
    Влияет ли версия ПХП?
    нативная 8.2 у сайта 7.0.33
    ?
     
  5. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Сейчас начитал, чтобы найти вызываемый шебанг для PHP в Linux, команда в консоли
    Код (Text):
    1. which php
    Накопал тут: https://stackoverflow.com/questions/21731745/how-to-add-shebang-with-php-script-on-linux
    Что нужно не запоминать его, научиться его использовать
    Мне показал в на одном сервере /usr/local/bin/php
    На другом /usr/bin/php
    Хз, что так... вроде серверы одинаковые...
    И поменяв в файлах, результата не получил...
    Единственное что, в логах ошибок ПХП , ошибки перестали появляться...
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Правильно заданный вопрос - 50% ответа (с)

    Попробуйте описать вопрос более просто, без примеров своего кода...
    например...
    - хочу запускать php код из командной строки с передачей N аргументов, как это сделать ...
    разобрались - дальше задаете вопросы

    или - как запустить php скрипт из командной строки
    - ответ php script.php
    ну конечно при условии что в системе прописан php и все настроено
    шебанг - чтоб запускать без указания в командной строке php, но там надо права еще файлу выставить что исполняемый
     
    artoodetoo нравится это.
  7. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Наверно нужно тему сменить, с вами согласен.
    Выяснил сейчас что вообще не работает shebang
    Окно терминала повисает если попробовать запустить файл через терминал.

    Права первым делом все проверил.
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Сам шебанг не может не работать!

    Ты в любом случае это делаешь в терминале, хоть с явным указанием php, хоть доверившись shebang.

    Вначале пробовать это надо с таким скриптом, который на 103% является рабочим, иначе будет миллион догадок почему зависло. Сделай такой скрипт буквально
    test.php
    PHP:
    1. <?php
    2. echo 'PHP version: ' . phpversion() . "\n";
    3. echo 'Path to script: ' . __FILE__ ."\n";
    Запусти его как `php ./test.php`, без шебангов!!! Если он не сработает, значит тупо php не установлен нормально. А если сработает, то
    test.php version 2:
    PHP:
    1. #!/usr/bin/env php
    2. <?php
    3. echo 'PHP version: ' . phpversion() . "\n";
    4. echo 'Path to script: ' . __FILE__ ."\n";
    Не забудь сделать `chmod +x ./test.php` ! И запусти его уже как `./test.php` Если сработает, то значит проблема в коде твоего большого скрипта. Отлаживать его надо.

    Короче, двигайся маленькими подконтрольными тебе шагами. Не должно быть "не работает!". Может быть только "не работает потому что..." )))
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Насчет рабочести $argc можно добавить в test.php строку:
    PHP:
    1. echo '$argc is ' . (!isset($argc) ? 'not set' : 'equal to ' . $argc) . "\n";
    в норме при вызове из консоли $argc есть и как минимум равен 1
     
  10. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Спасибо за подсказку! Второй день думаю как в логи передать все переменные, которые приходят в это место.

    Результат в консоли браузера можно увидеть?

    Собрал вчера новый тестовый сервер, специально ни чего лишнего не пробовал ставить, чтоб сначала разобраться с $PATH , и работой этой подсистемы.

    Так оно рабочее всё, с рабочего сервера переставлено, вопрос настроить правильно.

    Если нативная версия ПХП сервера будет отличаться от ПХП сайта, мешать работе не будет?
    Мне кажется не должно, так как код совместим с php 8.2
    --- Добавлено ---
    Тут вопрос меня ещё мучает, хоть читал много текста про права!
    Если это делать файловым менеджером, например FileZilla, или через Файловый менеджер IspManager
    Разница будет с `chmod +x ./test.php` ?

    Я даже пробовал окончания строк править утилитой Dos2Unix, без результата.
     
  11. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Положил 2 тестовых файла
    1. test.php
    Код (Text):
    1. <?php
    2. echo 'PHP version: ' . phpversion() . "\n";
    3. echo 'Path to script: ' . __FILE__ ."\n";
    2. test2.php
    Код (Text):
    1. #!/usr/bin/env php
    2. <?php
    3. echo 'PHP version: ' . phpversion() . "\n";
    4. echo 'Path to script: ' . __FILE__ ."\n";
    из домашней директории root
    запускаем:

    Код (Text):
    1. php /var/www/test/data/www/pafes.org/sites/all/modules/vircadm/test.php
    не работает
    Код (Text):
    1. php /var/www/test/data/www/pafes.org/sites/all/modules/vircadm/test2.php
    работает: PHP version: 8.2.26
    Path to script: /var/www/test/data/www/pafes.org/sites/all/modules/vircadm/test2
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А что пишет? Теоретически работать должно, пыхе этот первый комментарий до лампочки. Этот коммент для линуха, чтоб линух знал, что если этот текстовый файл сделали исполняемым и пытаются выполнить, его надо выполнять через пыху. А для самой пыхи всё, что вне <?php ?> вообще до лампочки, она просто выдаёт это в стандартный вывод, не интерпретируя
     
    artoodetoo нравится это.
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Плохой мальчик! ))) Ты в этот момент root? В данном случае на тест вроде не влияет, но привычка делать всё из-под рута потенциально приводит к проблемам. Не надо решать одну проблему и создавать другую.
    Делай всё что возможно из-под аккаунта которым nginx и php-fpm пользуются — www-data видимо. И только установку ПО делай рутом (например через sudo).

    Конкретнее, что происходит, какой текст в консоли? Там скорее всего написано в чём проблема.
     
  14. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Вообще ни чего...просто переходит на новую строчку и всё!
     
  15. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    в общем, не туда посмотрел, всё в первом скрипте выводит

    Дальше идем,
    Указал на файл версии ПХП который установлен на сайте:
    #!/opt/php70/bin/php
    Результат: php: cannot execute: required file not found

    Буду тестировать дальше
     
    #15 KNS, 28 дек 2024
    Последнее редактирование: 28 дек 2024
  16. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Разобрался!
    Как всегда все оказалось проще.
    Причина в символе BOM в конце shebang. После того как его убрали, ошибка пропала.
    Я пробовал изменить окончание строк на unix, утилитой unix2dos, а оказалось что нужно просто символы убрать.
    Дебиан 12 похоже, критично к этому относится!
    Нашли это, сисадмины службы поддержки FirstVDS/FirstDEDIC.

    Всем огромное ... кто подключился к этому вопросу!

    С Наступающим, Новым Годом!
     
    artoodetoo нравится это.
  17. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    33
    Симпатии:
    1
    Отписались в поддержку IspManager, следующим текстом, посмотрим что будет:

    Редактирование файлов после переноса пользователя, выполнялось редактором IspManager. Получается что знак BOM добавил именно встроенный редактор.

    В редакторе есть выбор кодировок, есть UTF-8 всё вроде правильно! Но должны быть и варианты UTF-8 без BOM, как например в Notepad++

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