Как запустить php скрипт через консоль
Здравствуйте, уважаемые знатоки могучего PHP.
Делаю интернет-магазин на OpenCart. В PHP я пока совсем не разбираюсь, однако столкнулся с необходимостью запуска скрипта через консоль.
Проблема в том, что в сети просто ничтожное количество информации об этом, а именно, о том, как запустить скрипт через консоль, что такое «консоль» и что вообще нужно делать.
Работаю на Денвере.
Задача: запустить PHP-скрипт через консоль. Цитата из инструкции:
Цитата:
Запускаем его командой $ php modbuild.php.
Так вот. Запускаю я Z:\usr\bin\php5.exe. Пишу Z:\home\site\www\console$ php modbuild.php
Результата — ноль.
Объясните, пожалуйста, что я делаю не так?
2. Muxa — 04 Января, 2013 — 13:41:44 — перейти к сообщению
modbuild.php — а он есть в этой папке (Z:\home\site\www\console), точно?
(Добавление)
Вы добавляли php.exe в переменную окружения?
там просто написано для nix, а не винды.. Попробуйте так
CODE (htmlphp):
скопировать код в буфер обмена
cd Z : \home\site\www\console
$ php modbuild . php
3. DelphinPRO — 04 Января, 2013 — 13:59:40 — перейти к сообщению
консоль — это командная строка.
в windows нажмите клавиши win+R
введите команду cmd
в черном окошке напишите
CODE (text):
скопировать код в буфер обмена
Z:\путь\к\файлу\php.exe Z:\путь\к\скрипту\modbuild.php
возможно сначала потребуется перейти в каталог со скриптом:
Как в битриксе запустить php скрипт через SSH (PuTTY)?
Вот с этим у меня заработало, но полезной работы не происходит.
Скрипт добавляет элементы в инфоблок, но при запуске через SSH консоль он просто выводит последнюю строку из файла, которая сообщает что запись завершена.
Если скрипт запускать в Google Chrome то всё работает корректно, элементы в инфоблок добавляются.
Но мне этих элементов очень много надо добавить, потому решил запускать скрипт через консоль, но там он почему то не работает.
Сообщений: 1224 Баллов: 212 Регистрация: 01.07.2009
14.07.2021 18:28:18
возможно в коде еще что-то не указано(подключение модуля или еще что-то), вот через консоль и не отрабатывает корректно.
можно в начало файла добавить что у вас выполняется php и нужно его использовать, например
#!/usr/bin/php
как вариант можно через консоль не через php запускать, а через wget, но лучше найти ошибку в вашем скрипте
Постоянный посетитель
Сообщений: 297 Баллов: 25 Регистрация: 18.10.2016
14.07.2021 21:53:52
где об этом почитать можно?
не ожидал что запуск скрипта в консоли будет проблемой которую непонятно как решать.
В скрипте ошибок нет. В Google Chrome он работает корректно.
Постоянный посетитель
Сообщений: 62 Баллов: 10 Регистрация: 13.11.2012
15.07.2021 00:52:59
Запуск скрипта через php-cli отличается от запуска через веб-сервер. Например в cli режиме массив $_SERVER отличается от того, что есть при запуске через веб-сервер, банально отсутствует $_SERVER[‘DOCUMENT_ROOT’] и $_SERVER[‘SERVER_NAME’], также там нет кук и соответственно рабочих сессий
Постоянный посетитель
Сообщений: 297 Баллов: 25 Регистрация: 18.10.2016
15.07.2021 12:58:19
вот такая ошибка в консоли появляется
call_user_func_array(): Argument #1 ($function) must be a valid callback, non-static method CSiteCorporate::ShowPanel () cannot be called statically (0)
Постоянный посетитель
Сообщений: 62 Баллов: 10 Регистрация: 13.11.2012
15.07.2021 15:12:33
Проверьте версию php, с которой работаете в консоли
Сообщений: 407 Баллов: 61 Регистрация: 08.10.2014
16.07.2021 14:29:10
Проверьте, на какой версии php крутится ваш сайт, можно посмотреть в админке: Настройки — Производительность — PHP
И проверьте в консоли, какие версии php у вас доступны для запуска, возможно у вас просто команда php не настроена и запускает какую-то старую версию. Выполните «whereis php»
Тогда для конкретного примера, что я привёл (у вас пути будут другие) запуск вашего файла выглядел бы так:
/opt/php72/bin/php /home/hj7756/tsdvdsika.ru/www/wordsng-sdvds-sdc/imeived.php
Постоянный посетитель
Сообщений: 297 Баллов: 25 Регистрация: 18.10.2016
16.07.2021 15:35:58
И проверьте в консоли, какие версии php у вас доступны для запуска, возможно у вас просто команда php не настроена и запускает какую-то старую версию. Выполните «whereis php»
Тогда для конкретного примера, что я привёл (у вас пути будут другие) запуск вашего файла выглядел бы так:
/opt/php72/bin/php /home/hj7756/tsdvdsika.ru/www/wordsng-sdvds-sdc/imeived.php
Написал вот такой запуск
/usr/bin/php7.3 /home/hj7756/tsdvdsika.ru/www/wordsng-sdvds-sdc/imeived.php
Теперь скрипт запускается, ошибки не выпадают.
Но он почему то не записывает инфоблоки.
*То есть скрипт выполняется:
1. Удаляет все существующие элементы инфоблока
2. Записывает новые элементы инфоблока — тут он их не записывает
при этом ошибок ни каких не показывает.
$el = new CIBlockElement; $PROP = array(); foreach ($xml as $key => $value) < $NAME = $value->name; $URLProp = $value->url; $PREVIEW_TEXT = $value->description; $PROP[$PropID] = $URLProp; // свойству с кодом 12 присваиваем значение "Белый" $arLoadProductArray = Array( "MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем "IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела "IBLOCK_ID" => $IBLOCK_ID, "PROPERTY_VALUES"=> $PROP, "NAME" => $NAME, "ACTIVE" => "Y", // активен "PREVIEW_TEXT" => $PREVIEW_TEXT, "DETAIL_TEXT" => $PREVIEW_TEXT ); if($PRODUCT_ID = $el->Add($arLoadProductArray)) < echo $PRODUCT_ID . " "; >else echo "Error: ".$el->LAST_ERROR; >
php-fpm не работает php скрипт из консоли
Нужно запускать скрипт по крону. На сервере связка nginx / php-fpm. Из того что выдавал гугл перепробовал несколько способов, и не один из них не срабатывает. Даже при попытке запустить скрипт из консоли
/home/www/name/ && /usr/sbin/php5-fpm file.php
Выдает следующие..
Usage: -R, allow-to-run-as-root
Allow pool to run as root (disabled by default)
[-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p ] [-g ] [-c ] [-d foo[=bar]] [-y ]
-c | Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value ‘bar’
-e Generate extended information for debugger/profiler
-h This help
-i PHP information
-m Show compiled in modules
-v Version number
-p, —prefix
Specify alternative prefix path to FastCGI process manager (default: php5-fpm).
-g, —pid
Specify the PID file location.
-y, —fpm-config
Specify alternative path to FastCGI process manager config file.
-t, —test Test FPM configuration and exit
- Динамические страницы — как заставить поисковые системы их проиндексировать?
- Google: Как удалить email-адреса из поисковой выдачи
- Безопасный Поиск Яндекса о вредоносном редиректоре на osa.pl
Персональный блог Толика Панкова
Стихи, рассказы, философия, IT, политика, панкизм, раздолбайство и болтовня.
Находясь под воздействием тяжелых наркотиков, телеведущий Аркадий Мамонтов продемонстрировал журналистам визитку плящущего в голом виде на Красной площади Жерара Депардье
Запуск php-скрипта в консоли.
Posted on 18.07.2018 by Tolik Punkoff
Ворчальная преамбула
Дальше будет банальщина, наверняка всем известная, но все же, вдруг кто не знает, да и себе от склероза.
Есть у меня маленький, но очень полезный горшочек скрипт, за которым надо постоянно ходить на сервер, а тут оказалось, что он понадобился на машине, где никаких интернетов нет, а данные, которые нужно обработать — есть. Я сначала решил сделать из него экзешник, но потом оставил эту затею, ибо с компиляторами PHP под Виндовоз неожиданно образовался какой-то жуткий геморрой. HipHop от Facebook напрочь отказался собираться, сайт Roadsend PHP Compiler сдох, а опять собирать с исходников GitHub стало после шаманства с HipHop откровенно влом, ну плюс MinGW особым удобством не отличается.
Заметил, кстати, удивительную странность — на машине с 12 Гб оперативной памяти и четвероядерным процессором, но под MinGW и, соответственно, Виндой, сборка происходит медленнее, чем на компьютере с Linux, скромным двухведерным процессором и двумя же Гб ОП.
Впрочем, все эти танцы с бубном были совершенно лишними.
Запуск скрипта в консоли
Все оказалось банально и элементарно, php прекрасно работает из консоли. Формат команды:
php.exe [параметры] [параметры_скрипта]
Параметры скрипта
Скрипт может «найти» свои параметры в элементах глобального массива $_SERVER :
$_SERVER[‘argc’] хранит количество параметров
$_SERVER[‘argv’] их значения. $_SERVER[‘argv’] сам является индексированным массивом. В элементе 0 содержится имя файла скрипта.
Примечание:
Начиная с PHP 4.3.0, при использовании CLI SAPI переменные $argc и and $argv зарегистрированы и заполнены соответствующими значениями. В более ранних версиях создание этих переменных, так же, как и для CGI или модуля веб-сервера, требует значение on директивы register_globals. Независимо от версии PHP или статуса опции register_global они всегда доступны как элементы массива $_SERVER или $HTTP_SERVER_VARS. Например: $_SERVER[‘argv’]
Скрипт, выводящий в консоль свои параметры:
Результат работы
Если запустить скрипт, например так:
php.exe con-test.php param1 param2 param3 tramparamparamparam

Портабельный скрипт
Все это не имело бы большого смысла, если бы для запуска скрипта пришлось бы тащить с собой Web-сервер или весь дистрибьютив PHP, со всеми модулями и прочим. Для минимального запуска PHP под Windows нужно всего 2 файла: php.exe и php*ts.dll , где * — версия PHP. Например, для использованного мной PHP5, это php5ts.dll
Разные мелочи
— Инклюды. Если скрипт подразумевает использование инклюдов, то их лучше держать либо в директории с главным скриптом, либо в поддиректориях, и прописывать в основном скрипте относительные пути. Т.е. так, как это обычно делается на сервере. Иначе PHP будет искать их либо в include_path, который прописан в php.ini, либо вообще неведомо где, точнее ведомо — это указывается как параметр при сборке самого PHP, если мне не изменяет склероз.
— php.ini Вообще, для запуска PHP он не нужен, но тут может вкрасться чущественная гадость. Если на машине уже установлен PHP, или php.ini подложен каким-то злоумышленником в каталог по умолчанию, для многих сборок под Windows это %WINDIR% , то может случиться неприятность.
Сам PHP ищет свой php.ini сначала в каталоге с самим собой, так что можно туда его подложить.
— Расширения PHP. Можно подложить нужные DLL расширений в подкаталог в каталоге с php.exe и прописать в extension_dir в php.ini относительный путь к каналогу, а в соответствующих параметрах extension — имена DLL
— PHP я цельностянул из Denwer
1. Создание EXE приложений на PHP Копия
2. Оффлайновые лекционные тетради в клеточку.