Изучаем PHP программирование

   Search   

Русская версия | English version   

Скрипты :: Секреты профессионалов :: Link :: FAQ   Пишите письма  



 

главная :: основы PHP

Запуск внешних программ

Сценарии РНР также могут выполнять программы, находящиеся на сервере. Такая возможность особенно часто используется при администрировании системы через web-браузер, а также для более удобного получения сводной информации о системе. ехес( ) Функция ехес( ) запускает заданную программу и возвращает последнюю строку ее выходных данных. Синтаксис функции ехес( ): string exec (string команда [, string массив [, int возврат]]) Обратите внимание: функция ехес( ) только выполняет команду, не выводя результатов ее работы. Все выходные данные команды можно сохранить в необязательном параметре массив. Кроме того, если при заданном параметре массив также задается переменная возврат, последней присваивается код возврата выполненной команды. Листинг 7.7 показывает, как использовать функцию ехес( ) для выполнения системной функции UNIX ping. Листинг 7.7. Проверка связи с сервером с применением функции ехес( ) $ping[$i]"; endfor; ?> Результат: PING www.php.net (208.247.106.187): 56 data bytes 64 bytes from 208.247.106.187: icmp_seq=0 ttl=243 time=66.602 ms 64 bytes from 208.247.106.187: icmp_seq=1 ttl=243 time=55.723 ms 64 bytes from 208.247.106.187: icmp_seq=2 ttl=243 time=70.779 ms 64 bytes from 208.247.106.187: icmp_seq=3 ttl=243 time=55.339 ms 64 bytes from 208.247.106.187: icmp_seq=4 ttl=243 time=69.865 ms -- www.php.net ping statistics -- 5 packets transmitted. 5 packets received. 0% packet loss round-trip min/avg/max/stddev - 55.339/63.662/70.779/6.783 ms Обратные апострофы Существует и другой способ выполнения системных команд, не требующий вызова функций, — выполняемая команда заключается в обратные апострофы (` `), а результаты ее работы отображаются в браузере. Пример: $output = `ls`; print "

$output
"; Этот фрагмент выводит в браузер содержимое каталога, в котором находится сценарий. Внутренний параметр ping -с 5 (-п 5 в системе Windows) задает количество опросов сервера. Если вы хотите просто вернуть неформатированные результаты выполнения команды, воспользуйтесь функцией passthru( ), описанной ниже. passthru( ) Функция passthru( ) работает почти так же, как ехес( ), за одним исключением — она автоматически выводит результаты выполнения команды. Синтаксис функции passthru( ): void passthru(string команда [, int возврат]) Если при вызове passthru( ) передается необязательный параметр возврат, этой переменной присваивается код возврата выполненной команды. escapeshellcmd( ) Функция escapeshellcmd( ) экранирует все потенциально опасные символы, которые могут быть введены пользователем (например, на форме HTML), для выполнения команд exec( ), passthru( ), system( ) или рореn( ). Синтаксис: string escapeshellcmd (string команда) К пользовательскому вводу всегда следует относиться с определенной долей осторожности, но даже в этом случае пользователи могут вводить команды, которые будут исполняться функциями запуска системных команд. Рассмотрим следующий фрагмент: $user_input = `rm -rf *`; // Удалить родительский каталог и все его подкаталоги ехес($user_input); // Выполнить $user_input !!! Если не предпринять никаких мер предосторожности, такая команда приведет к катастрофе. Впрочем, можно воспользоваться функций escapeshellcmd( ) для экранирования пользовательского ввода: $user_input = `rm - rf *`; // Удалить родительский каталог и все его подкаталоги ехес( escapeshellcmd($user_input)); // Экранировать опасные символы Функция escapeshellcmd( ) экранирует символ *, предотвращая катастрофические последствия выполнения команды. Безопасность является одним из важнейших аспектов программирования в среде Web, поэтому я посвятил целую главу этой теме и ее отношению к программированию РНР. За дополнительной информацией обращайтесь к главе 16.

Designed by Fedin
All right reserved
2003-2004
Hosted by uCoz