Привет, Гость!
home login register
[+] Купить Рекламу
Хостинг для тебя! Заходи не пожалеешь
Что мы делаем полезного на официальном сайте WAP-поддержки? Подробно ...
Вступайте в нашу группу ВКОНТАКТЕ
Поздравляем, новичка с ID:1000
Как самомусделать QR-код
IT новости: в Windows новая опасная уязвимость
Проблемы восприятия IT
Как подтвердить авторство в Google

Учебник PHP #7
<< 1 2 3 4 5 6 >>
целей вашего приложения может оказаться удобнее использовать pfsockopen( ) вместо fsockopen( ).

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

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

ехес( )

Функция ехес( ) запускает заданную программу и возвращает последнюю строку ее выходных данных. Синтаксис функции ехес( ):

string exec (string команда [, string массив [, int возврат]])

Обратите внимание: функция ехес( ) только выполняет команду, не выводя результатов ее работы. Все выходные данные команды можно сохранить в необязательном параметре массив. Кроме того, если при заданном параметре массив также задается переменная возврат, последней присваивается код возврата выполненной команды.

Листинг 7.7 показывает, как использовать функцию ехес( ) для выполнения системной функции UNIX ping.

Листинг 7.7. Проверка связи с сервером с применением функции ехес( )

<?

exec("ping -с 5 www.php.net $ping);

// В Windows - exec("ping -n 5 www.php.net. $ping);

for ($i=0; $i< count($ping);$i++) :

print "<br>$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 "<pre>$output</pre>";

Этот фрагмент выводит в браузер содержимое каталога, в котором находится сценарий.

Внутренний параметр 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.

Работа с файловой системой

В РНР существуют функции для просмотра и выполнения различных операций с файлами на сервере. Информация об атрибутах серверных файлов (местонахождение, владелец и привилегии) часто бывает полезной.

basename( )

Функция basename( ) выделяет имя файла из переданного полного имени. Синтаксис функции basename( ):

string basename(string полное_имя)

Выделение базового имени файла из полного имени происходит следующим образом:

$path = "/usr/local/phppower/htdocs/index.php"; $file = basename($path); // $file = "index.php"

Фактически эта функция удаляет из полного имени путь и оставляет только имя файла.

getlastmod( )

Функция getlastmod( ) возвращает дату и время последней модификации страницы, из которой вызывается функция. Синтаксис функции getlastmod( ):

int getlastmod(void)

Возвращаемое значение соответствует формату даты/времени UNIX, и для его форматирования можно воспользоваться функцией date( ). Следующий фрагмент выводит дату последней модификации страницы:

echo "Last modified: ".date( "H:i:s a". getlastmod( ) );

stat( )

Функция stat( ) возвращает индексируемый массив с подробной информацией о файле с заданным именем:

array stat(string имя_файла)

В элементах массива возвращается следующая информация:

0 Устройство

1 Индексный узел (inode)

2 Режим защиты индексного узла

3 Количество ссылок

4 Идентификатор пользователя владельца

5 Идентификатор группы владельца

6 Тип устройства индексного узла

7 Размер в байтах

8 Время последнего обращения

9 Время последней модификации

10 Время последнего изменения

11 Размер блока при вводе/выводе в файловой системе

12 Количество выделенных блоков

Таким образом, если вы хотите узнать время последнего обращения к файлу, обратитесь к элементу 8 возвращаемого массива. Рассмотрим пример:

$file - "datafile.txt";

list($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime,

$bsize) = stat($file);

print "$file is $size bytes. <br>";

print "Last access time: $atime <br>";

print "Last modification time: $mtime <br>";

Результат:

popen.php is 289 bytes.

Last access time: August 15 2000 12:00:00

Last modification time: August 15 2000 10:07:18

В этом примере я воспользовался конструкцией list () для присваивания имен каждому возвращаемому значению. Конечно, с таким же успехом можно вернуть массив, в цикле перебрать элементы и вывести всю необходимую информацию. Как видите, функция stat ( ) позволяет получить различные полезные сведения о файле.

Отображение и изменение характеристик файлов

У каждого файла в системах семейства UNIX есть три важные характеристики:

принадлежность группе;
владелец;
разрешения (permissions).

Все эти характеристики можно изменить при помощи соответствующих функций РНР. Функции, описанные в этом
Комментарии (0)
<< 1 2 3 4 5 6 >>
Скачать Java книгу

»php/mysql/pdo/js
В библиотеку

На главную

Сообщество wap разработчиков I HwapCMS официальный сайт поддержки


RSS-лента
Генерация: 0.0092 сек.