|
 |
Путь: >
Общие вопросы
Общие вопросы
Автор: -
Дата публикации - 21.5.2005
Просмотров: - 5009
Системные скрипты (демоны)
[p]Введение в системные скрипты[/p]
С чего начать? Пожалуй как всегда с азов -- что вообще такое PHP? Это интерпретируемый язык. То есть при каждом исполнение скрипта - выполняется программа, которая и выдает конечный результат.
Некоторые уже, наверное, заметили, что в Windows любой php-скрипт можно запустить через интерпретатор php.exe и посмотреть на "отдаваемый" код. В Windows другой возможности запустить скрипт, обходя веб-сервер возможности нет.
В unix же предусмотрена возможность указания программы-интерпретатора в первой строке скрипта. То есть executable-скрипт должен иметь примерно следующий вид:
[php]
#!/usr/bin/php
<?
print "Здравствуй, драгоценный и такой любимый мир."; // :)
?>
[
/php]
Причем первая строка содержит в себе путь к интерпретатору.
Вообще система запусков скриптов из консоли называется [b]CLI - Command Line Interface[/b] и, фактически, если скрипт запущен из консоли, то некоторые стандартные значения php.ini заменяются на:
[quote]- implicit_flush = true
- max_execution_time = 0 (unlimited)
- register_argc_argv = TRUE[/quote]
Так же для упрощения работы с системой при запуске скрипта в CLI PHP создает следующие константы:
- <b>STDIN</b> уже открытый fopen('php://stdin', 'r');
- <b>STDOUT</b> уже открытый fopen('php://stdout', 'w');
- <b>STDERR</b> уже открытый fopen('php://stderr', 'w');
Пользоваться ими можно так:
[code]<? freads(STDIN, 128); ?>[/code]
Только вот всё это счастье доступно начиная с версии 4.2.0 (если компилировать PHP с <b>--enable-cli</b>) и уже встроено в 4.3.0-dev.
[p]Ввод с клавиатуры[/p]
[php]
<?
/*
Понятное дело, что скрипт должен быть запущен не из браузера, а из консоли. Пресечению ненужных, но возможных проблем мы и посвятим следующую строчку.
*/
if(!empty($HTTP_HOST)) die('Вы пытаетесь запустить программу из браузера.');
// А теперь сама функция сбора данных
function input($len = 255) {
// $len - количество запрашиваемых символов
$f = fopen('php://stdin', 'r'); // открываем чтение ввода с клавиатуры
$input = fgets($f, $len); // читаем, собственно, чего написали до ENTER'а
fclose($f); // накрываем медным тазом
$input = trim($input); // обрезаем пробелы и переносы строки с обеих сторон
return $input; // возвращаем ввод
};
print "Привет! Вы имеете честь разговаривать с самим php://stdin. Говорите: ";
$i = input();
print "Вы сказали : '$i'.\nТеперь идите отсюда! :)\n";
?>
[
/php]
Кажется всё просто, не так ли? Теперь давайте попробуем немного усложнить код таким вот образом:
[php
$i = '';
print "Введите 'exit' для выхода из программы.\n";
while($i != 'exit') { // зацикливаем программу до ввода пользователем слова 'exit'
$i = input();
print "Вы снова сказали: '$i'.\n";
};
print "До скорых встреч!\n";
?>
[/php]
[p]Демоны[/p]
Что такое демоны? Это программки, единажды запущеные, и продолжающие находиться в памяти компьютера, творя свои зловещие дела. В чем их отличие от обычных скриптов? Ну, во-первых, они системные. Во-вторых - они выполняются неограниченое время. С первым мы немного разобрались. Со вторым разберемся в течении ближайшей минуты. :)
Итак? Как Вы, надеюсь, уже знаете - каждый PHP-скрипт ограничен по времени выполнения 30 секундами (в основном). Этого вполне достаточно для любой рутинной странички в интернет, но мало для серьезных серверных операций, рассылок и прочего. Наш же демон такого ограничения иметь не должен вообще. Решается это так:
[php]set_time_limit(0);[
/php]
Больше существенных ограничений нет.
Единственное, что я бы вам сразу посоветовал - это не забывать про такую функцию, как: [php]
print_r($GLOBALS);[
/php]
Которая отпишет вам полное дерево всех значений, актуальных на данный момент. С таким же успехом можно использовать print_r() для $_POST и т.д.
Обсудить в ФОРУМе - комментариев ()
Путь: >
Общие вопросы
Если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
|
|