Запуск файлов на выполнение

May 4, 2010 by admin Комментировать »

в РНР есть возможность запускать написанные скрипты из командной строки. Такие скрипты могут выполнять определенные действия или вести интерактивный диалог с пользователем. Запуск файла происходит по следующей команде.

php -f ‘путь_к_файлу’ [аргумент! [, аргумент2…]]

Подобно тому, как обычные РНР-скрипты принимают аргументы из GET- и POST-окружения, скрипты командной строки могут принимать параметры, пере­данные при вызове файла. Для доступа к таким параметрам используется встроен­ный массив $argv. В другом встроенном массиве $argc хранится количество эле­ментов массива Sargv. При этом необходимо учитывать, что самым начальным (нулевым) элементом $argv будет являться наименование выполняемого файла, следовательно, остальные параметры будут переданы начиная с $argv [ 1 ]. Рас­смотрим пример.

<?php

//Если передано два параметра, //(дополнительно к наименованию файла) if ($argc > 2) { //выведем первый и второй параметр

echo "First argument: $argv[l] and second: $argv[2]";

}

//если параметров меньше двух, else {

//напишем, что скрипту требуется два параметра echo "error. Script needs two parcuneters";

}

?>

Если сохранить такой файл (например, как /home /nw/ test. php или с: / test. php), то его можно будет выполнить с помощью следующей команды.

php -f "/hoine/nw/test.php" "hello" "world"

Результатом будет вывод в командной строке следующего текста.

First argmnent: hello and second: world

Для считывания данных из переменных окружения stdin, stdout и stderr используются константы STDIN, STDOUT и STDERR соответственно. Константа STDIN хранит данные, введенные со стандартного ввода, а константы STDOUT и STDERR ответственны за вывод на стандартное устройство вывода. С помощью этих констант можно придавать консольным РНР-приложениям интерактивность. Что­бы показать реальные преимущества CLI, рассмотрим пример, в котором в инте­рактивном режиме создается обычный текстовый файл небольшого размера.

<?php

//Выводим приглашение ввести имя файла fwrite(STDOUT. "Input file nameNn");

//Считываем введенные пользователем данные //в переменную $fname $fname = trim(fgets(STDIN));

//Выводим приглашение ввести текст файла fwrite(STDOUT, "Input file text\n"),-

//Считываем введенный текст в переменную $ftext $ftext = trim(fgets(STDIN));

//Записываем $ftext в файл $fname file_put_contents ($fname, $f text) ,-?>

Тем, кто уже имеет опыт работы с такими языками, как С или Pascal, данный код может показаться знакомым. Здесь происходит запись в выходной поток STDOUT и считывание введенных пользователем данных из STDIN, при этом исполь­зуются встроенные функции для работы с файлами. При запуске данного файла из консоли (описанным выше способом) в консоли появится фраза "Input file name" и система будет ожидать ввода строки. Далее можно ввести путь и имя фай­ла, например /home/nw/bla-bla-bla.txt, и нажать ввод (при выборе места соз­дания файла необходимо помнить о правах доступа к этому месту). После этого на экране появится приглашение ввести текст "Input file text". Введите строку текста, например "Привет мир", и снова нажмите ввод. Теперь, когда v скрипта будет имя и текст файла, он создаст данный файл и запишет в него указанный текст. Можете идти по указанному ранее пути и искать там свой свежеиспеченный файл.

Ту же самую операцию можно было осуществить и без использования интерак­тивного режима. Рассмотрим пример запуска РНР-скрипта с параметрами для соз­дания конфигурационного INI-файла гипотетического приложения.

<?php

$ftext = "[SETTINGS] ip = $argv[l] path = $argv[2]";

file__put_contents("/home/nw/myovm.ini", $ftext); ?>

При запуске данного скрипта из командной строки, например со следующими параметрами:

php -f "/home/nw/test.php" "127.0.0.1" "localhost" будет создан файл myown. ini со следующим содержанием:

[SETTINGS]

ip = 127.0.0.1

path = localhost

Получился обыкновенный INI-файл.

РНР-файлы могут быть обозначены как выполняемые файлы, и для их запуска не потребуется обращаться к РНР вручную, будет достаточно просто запустить файл, а операционная система определит, как этот файл обработать. Такая воз­можность доступна только в Linux, но легко эмулируется и на Windows с помощью ВАТ-файлов. Для начала рассмотрим вариант с Linux.

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

#!/usr/local/bin/php

Данная строка указывает путь к бинарному файлу РНР. Обычно это /usr/ local/bin/php или /usr/bin/ptip.

Далее может следовать код самого скрипта. Для выполнения такой файл дол­жен иметь статус выполняемого файла, что решается с помощью команды shell.

chmod +х /home/nw/test.php

Рассмотрим пример.

#!/usr/local/bin/php <?php

exec("/www/bin/httpd"), ^ ?> ‘

В данном коде будет предпринята попытка произвести старт Web-сервера Apache. Этот пример не стоит использовать для работы, так как вместе с Apache по­ставляется уже проверенный apachectl. Однако здесь продемонстрированы неко­торые возможности РНР в области запуска приложений и системных команд. Для выполнения такого файла можно просто ввести его имя.

[nw@localhost]# /home/nw/test-php

Файл будет выполнен и при этом будет произведена попытка старта Web-сервера.

Для работы под операционной системой Windows все делается немного иначе. Для запуска РНР-скрипта создается ВАТ-файл со следующим содержанием.

C:/PHP/php.exe -f C:/test.php

Здесь С: / РНР/php. ехе является путем к выполняемому файлу РНР.

ВАТ-файл — это обычный текстовый файл, которому присваивается расшире­ние . bat. После этого Windows будет воспринимать каждую его строку как коман­ду. В РНР-файле (С: /test. php) можно записать любые команды, например:

<?php

echo "killing ICQ"; exec("taskkill /im ICQLite.exe") ?>

После двойного щелчка на ВАТ-файле запустится скрипт test.php, в коде которого предпринимается попытка найти в числе запущенных в системе процесс ICQLite. ехе и "убить" его. Список запушенных процессов доступен после нажа­тия комбинации клавиш <CtrH-Alt+Del> на вкладке Процессы.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты