На этих выходных занимаюсь уборкой, в т.ч. и на компьютере. Уборка связана с кучей повторяющихся действий — хочется их автоматизировать и уйти пить пиво. Однако…
У *никсоидов есть shell-скрипты и Perl. Завидую.
У пользователей Windows есть BAT-скрипты, js-скрипты и vbs-скрипты. У первых не хватает гибкости, а Javascript или VBScript учить смысла нет.
Но ведь у меня есть PHP с его колоссальными возможностями. А PHP5 можно использовать через Command Line Interface, короче, вызывать скрипты без сервера, с командной строки. Выглядит это где-то так:
Коряво и ненативно. Я расскажу, как можно довести PHP-скриптинг под Windows до такого же удобства, что и BAT. Вру — до такого же, что и shell-скрипты. Линуксоиды обзавидуются!
Ассоциации файлов в Windows хранятся в ветке HKEY_CLASSES_ROOT в реестре. Не буду вдаваться в подробности ибо подготовил все необходимое в файле php_reg.zip.
Качаем файл, распаковываем, открываем в редакторе (не импортируем в реестр! рано еще.)
Замените
Теперь можно и импортировать.
Теперь PHP-скрипты запускаются практичски аналогично BAT-скриптам, а именно не только по двойному клику, но и принимают аргументы командной строки:
Заметьте, из консольных скриптов недоступны ни
Естественно, в наших руках оказывается весь инструментарий PHP — а это, кроме мощнейших встроенных функций обработки массивов и строк, еще и библиотеки PDO, GD2, SimpleXML + DOM, curl, классы PEAR и все остальные возможности PHP.
PHP и в консольном режиме способен практически на все!
Для вывода вполне подойдут
Кстати, в консоль лучше по-русски не говорить — там используется кодировка CP866, а не CP-1251 и тем более не UTF8...
Если же нужно спросить что-то у пользователя:
PHP-скрипты могут возвращать значения, как BAT или как обычные программы. Значение передается параметром в
А если хочется выводить результаты работы скрипта в HTML? Я предусмотрел и это.
Правый клик по скрипту, «Открыть в браузере» — и после выполнения откроется ваш браузер по умолчанию со страничкой, которую выдал скрипт.
Чтобы использовать это поведение по умолчанию, в .reg-файле нужно подправить строчку:
Вспомним, что если в
можно будет к любому скрипту подключать файлы из папки
Ну… Пусть это будет скрипт вывода дерева папок — в HTML, конечно!
Кросспост с моего блога: PHP5 как скриптовый язык для Windows
У *никсоидов есть shell-скрипты и Perl. Завидую.
У пользователей Windows есть BAT-скрипты, js-скрипты и vbs-скрипты. У первых не хватает гибкости, а Javascript или VBScript учить смысла нет.
Но ведь у меня есть PHP с его колоссальными возможностями. А PHP5 можно использовать через Command Line Interface, короче, вызывать скрипты без сервера, с командной строки. Выглядит это где-то так:
>php.exe script.php
Коряво и ненативно. Я расскажу, как можно довести PHP-скриптинг под Windows до такого же удобства, что и BAT. Вру — до такого же, что и shell-скрипты. Линуксоиды обзавидуются!
Правим реестр
Ассоциации файлов в Windows хранятся в ветке HKEY_CLASSES_ROOT в реестре. Не буду вдаваться в подробности ибо подготовил все необходимое в файле php_reg.zip.
Качаем файл, распаковываем, открываем в редакторе (не импортируем в реестр! рано еще.)
Замените
d:\\php
на путь к установленному PHP5 (с двойными слешами, конечно), а d:\\windows\\temp
— на путь к папке с временными файлами (да, у меня Windows на D: ).Теперь можно и импортировать.
Возможности
Теперь PHP-скрипты запускаются практичски аналогично BAT-скриптам, а именно не только по двойному клику, но и принимают аргументы командной строки:
>do_some_stuff.php with some args
Заметьте, из консольных скриптов недоступны ни
$_GET
, ни $_POST
, ни $_REQUEST
. Вместо них используем $_SERVER['argv']
:_SERVER["argv"] => Array ( [0] => F:\do_some_stuff.php, [1] => with, [2] => some, [3] => args ) _SERVER["argc"] => 4
Естественно, в наших руках оказывается весь инструментарий PHP — а это, кроме мощнейших встроенных функций обработки массивов и строк, еще и библиотеки PDO, GD2, SimpleXML + DOM, curl, классы PEAR и все остальные возможности PHP.
PHP и в консольном режиме способен практически на все!
Ввод-вывод
Для вывода вполне подойдут
echo
и print
, но что результат будет выведен после окончания работы скрипта. Если нужно вывести что-то немедленно — используемfputs(STDOUT, "Эй! Я тут понемногу удаляю твои документы!");
Кстати, в консоль лучше по-русски не говорить — там используется кодировка CP866, а не CP-1251 и тем более не UTF8...
Если же нужно спросить что-то у пользователя:
$input = fgets(STDIN);
Возвращение результата
PHP-скрипты могут возвращать значения, как BAT или как обычные программы. Значение передается параметром в
exit
:exit(1); //выход с результатом 1
Немного удобства — смотрим результат в HTML
А если хочется выводить результаты работы скрипта в HTML? Я предусмотрел и это.
Правый клик по скрипту, «Открыть в браузере» — и после выполнения откроется ваш браузер по умолчанию со страничкой, которую выдал скрипт.
Чтобы использовать это поведение по умолчанию, в .reg-файле нужно подправить строчку:
[HKEY_CLASSES_ROOT\PHPFile\Shell] @="OpenInBrowser"
Еще немного удобства — упрощаем подключение файлов
Вспомним, что если в
php.ini
указать include_path = ".;d:\php\includes"
можно будет к любому скрипту подключать файлы из папки
d:\php\includes
.Наглядный пример
Ну… Пусть это будет скрипт вывода дерева папок — в HTML, конечно!
<?php function recurse_dir($dir) { $olddir=getcwd(); chdir($dir); $thisdir=getcwd(); echo "<ul>"; if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { ?><li><a href="file://<?=$thisdir?>\<?=$file?>"><?=$file?><? if (is_dir($file)) recurse_dir($file); ?></li><? } } } closedir($handle); echo "</ul>"; chdir($olddir); } if ($_SERVER['argc']>=2) $dir = $_SERVER['argv'][1]; else $dir = getcwd(); ?> <h1><?=$dir?></h1> <? recurse_dir($dir); ?>
Кросспост с моего блога: PHP5 как скриптовый язык для Windows