::: PHP.com.ua - учимся вместе. ::: ::: PHP.com.ua - учимся вместе. :::



 
   - Вакансия PHP-программист, Днепропетровск...
  - Проблема с передачей переменной в PHP ск...
  - Как хранить конфигурацию cms'ки?
  - Проблема с сортировкой массива
  - коллизии md5
  - Странный глюк функции date
  - Скроллинг в iframe


Главная
Новости
Статьи
Шпаргалки
Файлы
О проекте
Форум
Футболки


FREEhost.com.ua - купил хостинг 10 у.е. на Begun в подарок.

iName.com.ua - регистрация доменных имен и хороший хостинг.

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

Designclub - Клуб дизайнеров Украины.

Регистрация доменов
Хостинг

 HowtoForge.ORG.UA - Это первый Украинский ресурс развития open source программного обеспечения


Путь: Статьи > Общие вопросы

Общие вопросы

Автор: -
Дата публикации - 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]&lt;? freads(STDIN, 128); ?&gt;[/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.
Контакты Design by webFaction Ukrainian PHP Group 2004-2005