| |
дание
функции с телом — заданной строкой — прошло успешно, значит, код синтаксически
корректен. Вот пример:
$fname="file.php";
$code=join("",File($fname));
if(create_function("","?>$code"))
echo "Файл $fname является программой на PHP";
else
echo "Файл $fname — не PHP-сценарий";
Мы используем оператор @, чтобы подавить сообщение о том, что функцию создать
не удалось, если файл не является верным PHP-сценарием. И, конечно, нам нужно
перевести наш код в контекст восприятия документа, для чего, собственно, и
нужно
обрамление строки тэгами ?> и .
Представленный фрагмент, конечно, будет воспринимать любой текстовый
файл и HTML-документ как "программу на PHP". И он будет прав, т. к., дейст-
вительно, статический текст, в котором нет PHP-вставок, является верным
PHP-сценарием.
Другие функции
void usleep(int $micro_seconds)
Часть IV. Стандартные функции PHP 344
Вызов этой функции позволяет сценарию "замереть" не указанное время
(в микросекундах). При этом затрачивается очень немного ресурсов процессора,
так
что функцию вполне можно вызывать, чтобы дождаться выполнения какой-нибудь
операции другого процесса — например, закрытия им файла.
Существует также функция sleep(), которая принимает в параметрах не мик-
росекунды, а секунды, на которые нужно задержать выполнение программы.
int uniqid(string $prefix)
Функция uniqid() возвращает строку, при каждом вызове отличающуюся от ре-
зультата предыдущего вызова. Параметр $prefix задает префикс (до 114 символов
длиной) этого идентификатора.
Зачем нужен префикс? Представьте себе, что сразу несколько интерпретаторов на
разных хостах одновременно вызвали функцию uniqid(). В этом случае существует
вероятность того, что результат работы функций совпадет, чего нам бы не
хотелось.
Задание в качестве префикса имени хоста решит проблему.
Чтобы добиться большей уникальности, можно использовать uniqid()
"в связке" с функциями mt_rand() и md5(), описанными в предыдущих главах.
Глава 25
Управление сессиями
Сессии, наконец-то появившиеся в PHP версии 4, представляют собой механизм, по-
зволяющий хранить некоторые (и произвольные) данные, индивидуальные для каж-
дого пользователя (например, его имя и номер счета), между запусками сценария.
Термин "сессия" является транслитерацией от английского слова session, что в
буквальном переводе должно бы означать "сеанс". Однако последнее слово в
программистском жаргоне не особенно-то прижилось (насколько я знаю), по-
этому я буду употреблять термин "сессия". И да простят меня студенты, если у
них это вызывает нехорошие ассоциации.
Фактически, сессия — это некоторое место долговременной памяти (обычно часть на
жестком диске и часть — в Cookies браузера), которое сохраняет свое состояние
меж-
ду вызовами сценариев одним и тем же пользователем. Иными словами, поместив в
сессию переменную (любой структуры), мы при следующем запуске сценария полу-
чим ее в целости и сохранности. Трудно переоценить удобства, которые это
предос-
тавляет нам, программистам.
Зачем нужны сессии?
В Web-программировании есть один класс задач, который может вызвать довольно
много проблем, если писать сценарии "в лоб". Речь идет о слабой стороне CGI —
не-
возможности запустить программу на длительное время, позволив ей при этом обме-
ниваться данными с пользователями.
В общем и целом, сценарии должны запускаться, моментально выполняться и воз-
вращать управление системе. Теперь представьте, что мы пишем форму, но в ней
такое большое число полей, что было бы глупо поместить их на одну страницу. Нам
нужно разбить процесс заполнения формы на несколько этапов, или стадий, и пред-
ставить их
|
|