Дальше будет банальщина, наверняка всем известная, но все же, вдруг кто не знает, да и себе от склероза.
Есть у меня маленький, но очень полезный горшочек скрипт, за которым надо постоянно ходить на сервер, а тут оказалось, что он понадобился на машине, где никаких интернетов нет, а данные, которые нужно обработать — есть. Я сначала решил сделать из него экзешник, но потом оставил эту затею, ибо с компиляторами 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. Оффлайновые лекционные тетради в клеточку.