Толик Панков
hex_laden
............ .................. ................
October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Запуск php-скрипта в консоли.

Ворчальная преамбула


Дальше будет банальщина, наверняка всем известная, но все же, вдруг кто не знает, да и себе от склероза.

Есть у меня маленький, но очень полезный горшочек скрипт, за которым надо постоянно ходить на сервер, а тут оказалось, что он понадобился на машине, где никаких интернетов нет, а данные, которые нужно обработать - есть. Я сначала решил сделать из него экзешник, но потом оставил эту затею, ибо с компиляторами 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	
	echo "Console test \n\n";
	
	echo "Arguments count: ".$_SERVER['argc']."\n";
	echo "Arguments values:\n";
	
	$i=0;
	
	foreach ($_SERVER['argv'] as $arg)
	{
		echo $i.": ".$arg."\n";
		$i++;
	}	
?>


Результат работы


Если запустить скрипт, например так:

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 :)

- Архив с примером и "портабельным" PHP

Источники


1. Создание EXE приложений на PHP Копия
2. Оффлайновые лекционные тетради в клеточку.

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/07/18/zapusk-php-skripta-v-konsoli/

From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.