- Главная →
- Поддержка →
- Техническая документация →
- PHP: использование программ на языке PHP
PHP: использование программ на языке PHP
Пользователям хостинга предоставляется возможность использовать на своих сайтах программы на языке PHP (в соответствии с тарифным планом). У нас установлена одна из последних версий PHP и мы стараемся по мере возможности ее обновлять. Текущую конфигурацию можно посмотреть при помощи функции phpinfo().
Пример скрипта для просмотра конфигурации PHP:
<?php
phpinfo();
?>
- Что такое PHP и как начать с ним работать
- Поддерживаемые на нашем хостинге функции (модули)
- Расширения файлов для PHP-скриптов, как добавить свое расширение
- Отправка писем с вложениями при помощи функции mail
- Ошибка форума phpBB: Critical error. Error creating new session
- Проблемы работы функций strtoupper() и strtolower() с кириллицей
- Поиск с помощью Яндекс.XML
- Возможности изменения конфигурации PHP для пользователя
- Как собрать свой собственный интерпретатор PHP
- Как подключить модуль templates к интерпретатору PHP
- Установка расширения ionCube
- Установка Zend Optimizer 3.3.0 на серверы с PHP 5.x.x
- Установка Zend Optimizer 3.3.9 на серверы с PHP 5.x.x
- Установка Zend Optimizer 2.6.0 на серверы с PHP 4.x.x
- Как выполнять PHP-скрипты в заданное время по расписанию
- Вывод ошибок в PHP
- Ограничения
- Документация и полезные ссылки
Что такое PHP и как начать с ним работать
PHP: Hypertext Preprocessor — очень простой даже для начинающего веб-программиста язык, который, тем не менее, обладает очень серьезными возможностями. PHP — язык достаточно высокого уровня, что позволяет просто реализовывать на нем именно веб-проекты, не заботясь при этом о ненужных низкоуровневых процессах. Если вы хотите добавить динамику и интерактив на свой сайт, но при этом не хотите изучать более сложные языки вроде Perl, можно использовать PHP. Этот язык также содержит большое количество встроенных возможностей для работы с популярной СУБД MySQL, что делает выбор PHP для веб-программирования еще более привлекательным.
Начать использовать PHP очень просто: нужно создать в веб-пространстве файл с расширением *.php и поместить в него нужные PHP-инструкции. Например, создадим файл test.php в каталоге www вашего домена и поместим в него следующий текст:
<?php
echo "Hello, world! This is my first program with PHP!"
?>
Теперь откройте страницу http://www.ваш_домен.ru/test.php и вы увидите результат выполнения скрипта. PHP — это просто. Простоты этому языку добавляет наличие отличной документации на русском языке, которая доступна здесь. Есть отличный поиск по документации, примеры использования функций, а также прямо на сайте вы можете почитать рекомендации пользователей PHP по применению конкретных возможностей.
Поддерживаемые на нашем хостинге функции
Мы используем одну из последних версий PHP в виде модуля для веб-сервера Apache, которая собрана с поддержкой следующих модулей (функций):
- mysql
- ftp
- dbase
- gdbm
- ndbm
- xslt
- xslt-sablot
- iconv
- gd
- gd-native-ttf
- ttf
- zlib
- jpeg
- png
Также пользователь может скомпилировать свой собственный бинарный файл PHP, о чем написано ниже, и использовать его в cgi-режиме.
Расширения файлов для PHP-скриптов, как добавить свое расширение
Интерпретатором PHP автоматически обрабатываются как PHP-сценарии файлы со следующими расширениями:
- *.php
- *.phtml
То есть, файлы, имеющие такие расширения, будут автоматически обрабатываться веб-сервером как PHP-скрипты. Например, index.php или 123.phtml. Пользователь может самостоятельно добавить собственные расширения для обработки соответствующих файлов как PHP-сценариев, поместив в файл .htaccess строку вида:
AddType application/x-httpd-php .ext1 .php3 .html
где ext1, php3 и .html — добавляемые расширения в названии файлов. Например, в данном случае PHP-скриптами будут считаться файлы index.ext1, file.php3 и test.html.
Отправка писем с вложениями при помощи функции mail
Ссылки на готовые примеры скриптов, использующих функцию mail для отправки писем с вложениями, есть в документации на сайте разработчика: LII. Mail Functions.
Ошибка форума phpBB: Critical error. Error creating new session
Данная неработоспособность связана с «дыркой» в самом форуме phpbb.
Cостоит она в том, что форум хранит в БД все сессии, не удаляя их, или удаляя с такой периодичностью, что, в конце концов, таблица сессий переполняется и форум выдаёт ошибку «phpBB: Critical error. Error creating new session», т.к. не может работать дальше с таким количеством сессий.
Чтобы устранить ошибку выполните следующее:
- откройте корневую директорию форума
- откройте файл includes/sessions.php
- найдите строку 152
-
замените эту строку
на следующие:message_die(CRITICAL_ERROR,'Error creating new session', '', __LINE__, __FILE__, $sql);$error = TRUE; if (SQL_LAYER == "mysql" || SQL_LAYER == "mysql4") { $sql_error = $db->sql_error($result); if ($sql_error["code"] == 1114) { $result = $db->sql_query('SHOW TABLE STATUS LIKE "'.SESSIONS_TABLE.'"'); $row = $db->sql_fetchrow($result); if ($row["Type"] == "HEAP") { if ($row["Rows"] > 2500) { $delete_order = (SQL_LAYER=="mysql4") ? " ORDER BY session_time ASC" : ""; $db->sql_query("DELETE QUICK FROM ". SESSIONS_TABLE."$delete_order LIMIT 50"); } else { $db->sql_query("ALTER TABLE ".SESSIONS_TABLE." MAX_ROWS=".($row["Rows"]+50)); } if ($db->sql_query($sql)) { $error = FALSE; } } } } if ($error) { message_die(CRITICAL_ERROR, "Error creating new session", "", __LINE__, __FILE__, $sql); } - сохраните файл и скопируйте на сервер, записав поверх существующего.
Теперь вы можете не волноваться за переполнение таблицы сессий в базе данных форума phpBB.
Проблемы работы функций strtoupper() и strtolower() с кириллицей
Проблемы при работе с кириллицей в PHP-скриптах функций strtoupper() и strtolower() возникают, когда неправильно определена текущая локаль (locale). Для правильного её определения следует воспользоваться функцией setlocale() в самом начале вашего PHP-сценария:
<?php
setlocale(LC_ALL, 'ru_RU.CP1251');
echo strtoupper('Работает!');
?>
Поиск с помощью Яндекс.XML
Если вы решили воспользоваться сервисом Яндекс.XML, то прежде всего вам потребуется выделенный IP-адрес, который вы можете добавить для любого домена в панели управления: в меню Древо услуг > Домен, напротив характеристики «выделенный IP/SSL» нажмите «добавить» (в данном случае подключать SSL не обязательно, но в комментариях обязательно укажите причину, по которой вам понадобился выделенный IP-адрес).
Далее для организации запроса именно с выделенного IP-адреса существует несколько вариантов:
-
Использовать функцию socket_bind:
<?php // Создаем новый сокет: $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // Ваш выделенный IP-адрес: $sourceip = 'xxx.xxx.xxx.xxx'; // Используем этот IP-адрес: socket_bind($sock, $sourceip); // Соединяемся с удаленным сервером: socket_connect($sock, 'xmlsearch.yandex.ru', 80); // Делаем запрос: $request = 'GET /xmlsearch?query=' . $search . ' HTTP/1.0' ."\r\n" .'Host: xmlsearch.yandex.ru ' . "\r\n\r\n"; socket_write($sock, $request); // Получаем и выводим ответ: while(!socket_last_error($sock)){ if($buffer=socket_read($sock,512,PHP_NORMAL_READ)){ echo $buffer; } } // Закрываем сокет: socket_close($sock); ?>Здесь переменная $search обозначает только сам поисковый запрос, как это описано на сайте Яндекса, то, что написано после выражения «query=». При использовании PHP-интерпретатора как модуля Apache (по умолчанию на виртуальном хостинге именно так) работа с сокетами запрещена, поэтому следует использовать свой PHP-интерпретатор, собрать который можно по инструкции при конфигурировании обязательно указав ключ –enable-sockets.
-
C помощью curl_setopt:
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOBODY, false); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_INTERFACE, "xxx.xxx.xxx.xxx"); curl_setopt($ch, CURLOPT_URL, $search); $xml_data=curl_exec($ch); curl_close($ch); ?>
Переменная $search — HTTP-запрос целиком (то есть URL).
В этом случае также потребуется собрать свой интерпретатор PHP, указав при конфигурировании ключ –with-curl=/usr/local.
Возможности изменения конфигурации PHP для пользователя
Очень часто пользователю требуется так или иначе изменить настройки PHP для работы со скриптами. Существует два возможных варианта.
Случай 1. необходимо внести изменения на уровне компиляции (сборки) PHP (добавление модулей, изменение системных опций PHP_INI_SYSTEM).
Случай 2. достаточно изменить значение одной или нескольких опций, имеющих статус изменяемости PHP_INI_PERDIR или PHP_INI_ALL.
Напомним значение и расшифровку констант PHP_INI_*:
| PHP_INI_USER | 1 | Опция может быть установлена в пользовательских скриптах |
|---|---|---|
| PHP_INI_PERDIR | 2 | Опция может быть установлена в php.ini, .htaccess или httpd.conf |
| PHP_INI_SYSTEM | 4 | Опция может быть установлена в php.ini или httpd.conf |
| PHP_INI_ALL | 7 | Опция может быть установлена где угодно |
Список, описание и статус изменяемости директив можно найти в приложении G документации PHP.
В первом случае, когда нам нужно изменить конфигурацию PHP добавлением новых модулей (imap, templates, curl), с которыми не собран наш модульный PHP. Если это так, необходимо собрать свой PHP. После сборки рекомендуется скопировать наш INI-файл:
/usr/local/etc/php.ini
или
/usr/local/etc/php.ini
в зависмости от вида используемого SAPI-интерфейса (cgi или cli).
Во втором случае, когда не требуется использование каких-либо дополнительных модулей, а необходимо лишь изменить значение управляемых в php.ini директив — следует просто скопировать уже собранный исполняемый файл php-SAPI на площадку и произвести необходимые действия с .htaccess:
/usr/local/bin/php-cgi
или
/usr/local/bin/php
в зависмости от вида используемого SAPI-интерфейса.
В случае, если установленные значения директив в наших INI-файлах совпадают с желаемыми — копировать INI-файл не нужно. В частности, такие действия проводятся, когда требуется увеличить значение memory_limit для PHP. Если предполагается изменение директив в php-SAPI.ini — его следует скопировать, подобно описанному выше способу.
ls /usr/local/etc/php.ini | awk '{print $1}' | xargs grep memory_limit
/usr/local/etc/php.ini: memory_limit = 32M
Обратите особое внимание на то, что если в результате добавления своей директивы вы получили ошибку или не получили желаемого результата, то есть вероятность того, то конфигурирование соответствующего параметра просто недоступно на этом уровне. Если это так, попробуйте собрать свой PHP, но предварительно, пожалуйста, уточните у нашей технической поддержки действительно ли в этой ситуации вам нужен собственный PHP.
Как собрать свой собственный интерпретатор PHP
Для того, чтобы собрать свой собственный интерпретатор PHP сначала нужно получить доступ к unix shell. Далее, зайдя в UNIX shell, действуйте по следующему алгоритму:
- В домашней директории создаем поддиректорию для временного хранения исходных текстов интерпретатора PHP. Создаем каталог с названием src командой mkdir src и заходим в него, выполнив команду cd src.
Скачиваем с сайта разработчиков дистрибутив PHP:
wget http://ru2.php.net/get/php-5.2.11.tar.bz2/from/ru.php.net/mirror- Распаковываем архив командой tar -xjvf php-5.2.11.tar.bz2
- Переходим в каталог php-5.2.11 командой cd php-5.2.11
-
Используя команду ./configure выполняем предварительную конфигурацию PHP для дальнейшей компиляции. Выполнив команду ./configure --help | more вы увидите полный список возможных опций, из которых вам нужно выбрать нужные.
Пример конфигурации:
./configure --prefix=/home/uXXXXX/php \ --with-mysql=/usr/local --enable-ftp --enable-dbase \ --with-gdbm --with-ndbm --with-iconv=/usr/local \ --with-gd=/usr/local --enable-gd-native-ttf=/usr/local \ --with-jpeg-dir=/usr/local --with-png-dir=/usr/local \ --with-freetype-dir=/usr/local --with-ttf \ --with-zlib-dir=/usr --disable-posix \ --enable-force-cgi-redirect --enable-inline-optimization \ --without-pear --disable-debugПример конфигурации с поддержкой IMAP:
./configure --prefix=/home/uXXXXX/php \ --with-mysql=/usr/local --enable-ftp --enable-dbase \ --with-gdbm --with-ndbm --with-iconv=/usr/local \ --with-gd=/usr/local --enable-gd-native-ttf=/usr/local \ --with-jpeg-dir=/usr/local --with-png-dir=/usr/local \ --with-freetype-dir=/usr/local --with-ttf \ --with-zlib-dir=/usr --disable-posix \ --enable-force-cgi-redirect --enable-inline-optimization \ --without-pear --disable-debug --with-imap --with-imap-ssl -
Запускаем компиляцию и последующую установку уже сконфигурированного PHP:
make make installПо завершению процессов сборки и установки в каталоге php/bin/ (выполняем cd ~/php/bin/) вы найдете исполняемый бинарный файл php.
-
Посмотреть с какими модулями он был собран можно командой ./php -m (чтобы убедиться что вы собрали именно нужный вам PHP)
-
Копируем исполняемый файл в ваш каталог cgi-bin, выставляем необходимые права:
cp /home/uXXXXX/php/bin/php-cgi /home/uXXXXX/имя_домена/cgi-bin/php chmod 755 /home/uXXXXX/имя_домена/cgi-bin/phpЕсли вы собираете PHP версии более ранней, чем 5.2.3, то CGI-интерпретатор создается с другим именем:
cp /home/uXXXXX/php/bin/php /home/uXXXXX/имя_домена/cgi-bin/ chmod 755 /home/uXXXXX/имя_домена/cgi-bin/phpКопируем конфигурационный файл в ваш каталог cgi-bin:
cp /usr/local/etc/php.ini /home/uXXXXX/имя_домена/cgi-bin/php.ini -
uXXXXX в этой команде нужно заменить на название вашей виртуальной площадки, а имя_домена — на название вашего домена, для которого мы устанавливаем новый PHP.
-
В каталоге www создаем файл .htaccess со следующими директивами:
Action php-script /cgi-bin/php AddHandler php-script .phpТеперь файлы с расширением *.php будут обрабатываться именно собранным вами PHP, а остальные PHP-скрипты (файлы с другими расширениями из тех, что обрабатываются нашим веб-сервером как PHP-скрипты) — основным PHP-модулем веб-сервера.
Если все работает, то каталог $HOME/php-5.2.11 можно удалить:
cd; rm -rf php-5.2.11
Как подключить модуль templates к интерпретатору PHP
Для установки модуля templates необходимо установить собственный интерпретатор PHP.
-
В домашней директории создаем поддиректорию для временного хранения исходных текстов интерпретатора PHP.
Создаем каталог с названием src командой mkdir src и заходим в него выполнив команду cd src:
$ mkdir src $ cd src -
Скачиваем с сайта разработчиков дистрибутив PHP:
$ wget http://ru2.php.net/get/php-5.2.11.tar.bz2/from/ru.php.net/mirror -
Распаковываем архив, переходим в каталог расширений:
$ tar -xjvf php-5.2.11.tar.bz2 $ cd php-5.2.11/еxt -
Скачиваем дистрибутив php-templates:
$ wget \ http://surfnet.dl.sourceforge.net/sourceforge/php-templates/php_templates-1.7.2.tar.gz -
Распаковываем архив в текущую директорию:
$ tar xzfv php_templates-1.7.2.tar.gz $ cd templates/ -
Выполняем следующий скрипт, которые удалит ненужные символы возврата каретки в файлах дистрибутива модуля:
$ for f in *; do cp $f $f.old; cat $f.old| tr -d "\r" > $f; rm $f.old; done -
Переходим в директорию PHP:
$ cd ../../ -
Выполняем:
$ autoconf $ chmod 775 ./ -
Используя команду ./configure выполняем предварительную конфигурацию PHP для дальнейшей компиляции. Выполнив команду ./configure --help | more вы увидите полный список возможных опций, из которых вам нужно выбрать нужные.
Пример конфигурации:
./configure --prefix=/home/uXXXXX/php \ --with-mysql=/usr/local --enable-ftp \ --enable-dbase --with-gdbm \ --with-ndbm --enable-xslt --with-xslt-sablot \ --with-iconv=/usr/local --with-expat-dir=/usr/local \ --with-gd=/usr/local \ --enable-gd-native-ttf=/usr/local \ --with-jpeg-dir=/usr/local \ --with-png-dir=/usr/local \ --with-freetype-dir=/usr/local --with-ttf \ --with-zlib-dir=/usr --enable-memory-limit \ --disable-posix --enable-force-cgi-redirect \ --enable-track-vars --disable-syntax-hl \ --enable-inline-optimization --without-pear \ --disable-debug --enable-templates -
Запускаем компиляцию и последующую установку уже сконфигурированного PHP:
$ gmake $ gmake install -
По завершению процессов сборки и установки в каталоге php/bin/ вы найдете исполняемый бинарный файл php, собранный с модулем templates
$ cd ~/php/bin/ $ ./php -m [PHP Modules] ctype dba dbase ftp gd iconv mysql overload pcre session standard templates tokenizer xml xslt zlib
Дальнейшие действия по использованию собранного бинарного файла были описаны выше.
Установка расширения ionCube
-
Предварительно надо скопировать нашу cgi-версию PHP или же
собрать собственную
$ cd ~/domain.tld/cgi-bin/ $ cp /usr/local/bin/php-cgi phpИ создать файл php.ini:
$ cp /usr/local/etc/php.ini php-cgi.ini $ ln -s php-cgi.ini php.iniТеперь в каталоге domain.tld/www нужно создать файл .htaccess (или изменить существующий) со следующими директивами:
Action php-script /cgi-bin/php AddHandler php-script .php - Скачиваем дистрибутив ionCube с сайта разработчика:
$ cd ~ $ wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_fre_6_x86.tar.gz - Распаковываем:
$ tar xzf ioncube_loaders_fre_6_x86.tar.gz - Добавляем данное расширение в php.ini:
$ echo "zend_extension = /home/uXXXXX/ioncube/ioncube_loader_fre_5.2.so" >> ~/domain.tld/cgi-bin/php.ini -
Для проверки корректности установки выполните следующие команду:
$ cp ~/ioncube/loader-wizard.php ~/domain.tld/www/И откройте ссылку http://domain.tld/loader-wizard.php в браузере
В случае, если все установлено корректно, по ссылке Вы увидите страницу со следующим текстом:
"The ionCube Loader 3.3.16 is already installed and encoded files should run without problems."
Установка Zend Optimizer 3.3.0 на серверы с PHP 5.x.x
Обратите внимание, что данная инструкция применима только для площадок с PHP 5.x.x.
-
Скачиваем с нашего сайта подготовленный дистрибутив.
$ cd ~ $ wget http://masterhost.ru/support/doc/php/zend-3.3.0-for-PHP5.tar.bz2 -
Распаковываем закачанный архив Zend Optimizer в среде UNIX shell, находясь в своей домашней папке:
$ tar -xjvf zend-3.3.0-for-PHP5.tar.bz2 После этого у вас появится папка zend:
$ ls |grep zend zend zend-3.3.0-for-PHP5.tar.bz2-
Переходим в папку ~/zend/etc и меняем конфигурационный файл php_ini_append:
где uYYYYY — номер вашей площадки (uXXXX оставляем без изменений).$ cd ~/zend/etc/ $ sed 's/uXXXX/uYYYYY/' php_ini_append > tmpfile $ mv -f tmpfile php_ini_append -
Теперь вам надо скопировать нашу cgi-версию PHP или же собрать собственную.
Чтобы скопировать нашу версию PHP, выполните следующий код:
$ cd ~/имя_домена/cgi-bin/ $ cp /usr/local/bin/php-cgi php -
И создать измененный конфигурационный файл php.ini:
$ cat /usr/local/etc/php.ini ~/zend/etc/php_ini_append > php-cgi.ini $ ln -s php-cgi.ini php.ini -
Убедиться в работоспособности zend можно, выполнив следующую команду:
$ ./php -m |grep Zend Zend Optimizer [Zend Modules] Zend Extension Manager Zend Optimizer -
В каталоге www создаем файл .htaccess со следующими директивами:
Action php-script /cgi-bin/php AddHandler php-script .php(файлы с другими расширениями из тех, что обрабатываются нашим веб-сервером как PHP-скрипты) — основным PHP-модулем веб-сервера.
Установка Zend Optimizer 3.3.9 на серверы с PHP 5.x.x
Обратите внимание, что данная инструкция применима только для площадок с PHP 5.x.x.
-
Скачиваем с нашего сайта подготовленный дистрибутив.
$ cd ~ $ wget http://masterhost.ru/support/doc/php/zend-3.3.9-for-PHP5.tgz -
Распаковываем закачанный архив Zend Optimizer в среде UNIX shell, находясь в своей домашней папке:
$ tar xf zend-3.3.9-for-PHP5.tgz После этого у вас появится папка zend:
$ ls |grep zend zend zend-3.3.0-for-PHP5.tar.bz2-
Переходим в папку ~/zend/etc и меняем конфигурационный файл php_ini_append:
где uYYYYY — номер вашей площадки (uXXXX оставляем без изменений).$ cd ~/zend/etc/ $ sed 's/uXXXX/uYYYYY/' php_ini_append > tmpfile $ mv -f tmpfile php_ini_append -
Теперь вам надо скопировать нашу cgi-версию PHP или же собрать собственную.
Чтобы скопировать нашу версию PHP, выполните следующий код:
$ cd ~/имя_домена/cgi-bin/ $ cp /usr/local/bin/php-cgi php -
И создать измененный конфигурационный файл php.ini:
$ cat /usr/local/etc/php.ini ~/zend/etc/php_ini_append > php-cgi.ini $ ln -s php-cgi.ini php.ini -
Убедиться в работоспособности zend можно, выполнив следующую команду:
$ ./php -m |grep Zend Zend Optimizer [Zend Modules] Zend Extension Manager Zend Optimizer -
В каталоге www создаем файл .htaccess со следующими директивами:
Action php-script /cgi-bin/php AddHandler php-script .php(файлы с другими расширениями из тех, что обрабатываются нашим веб-сервером как PHP-скрипты) — основным PHP-модулем веб-сервера.
Установка Zend Optimizer 2.6.0 на серверы с PHP 4.x.x
Обратите внимание, что данная инструкция применима только для площадок с PHP 4.x.x
-
Скачиваем с сайта разработчиков дистрибутив в среде UNIX shell:
wget http://downloads.zend.com/optimizer/2.6.0/ZendOptimizer-2.6.0-freebsd4.3-i386.tar.gz -
Распаковываем закачанный архив Zend Optimizer:
tar xzf ZendOptimizer-2.6.0-freebsd4.3-i386.tar.gz Если до установки вы не собирали PHP интерпретатор, то достаточно скопировать уже собранный исполняемый файл php-SAPI:
cd ~/имя_домена/cgi-bin cp /usr/local/php5/bin/php-cgi php cp /usr/local/etc/php.ini php-cgi.iniДобавляем в конфигурационный файл php-cgi.ini следующие строки:
где uYYYYY — номер вашей площадки.[Zend] zend_extension=/home/uYYYYY/ZendOptimizer-2.6.0-freebsd4.3-i386/data/4_4_x_comp/ZendOptimizer.so zend_extension_ts=/home/uYYYYY/ZendOptimizer-2.6.0-freebsd4.3-i386/data/4_4_x_comp/TS/ZendOptimizer.soПроверяем:
./php -m|grep Zend Zend Optimizer [Zend Modules] Zend Optimizer-
В каталоге www создаем файл .htaccess со следующими директивами:
Action php-script /cgi-bin/php AddHandler php-script .php
Как выполнять PHP-скрипты в заданное время по расписанию
Иногда у PHP-программистов возникают задачи, которые требуют запуска PHP-скриптов в указанное время. Например, загрузка прайс-листа в базу данных, создание/удаление файлов на диске сервера, загрузка на сервер документов с других серверов и так далее. Можно использовать для этого возможности программы cron, которая работает на сервере.
Подробности о работе cron и его использовании вы найдете в отдельном документе. Здесь же мы опишем тонкости запуска таким образом именно PHP-скриптов.
На наших серверах установлен бинарный файл интерпретатора PHP, который можно вызывать из cron. Полный путь к нему — /usr/local/bin/php. В качестве параметра нужно передать полный путь до запускаемого PHP-скрипта. Пример задания для cron:
- в случае с PHP 5
0 1 * * * /usr/local/bin/php /home/uXXXXX/script.php - или в случае с PHP 4
0 1 * * * /usr/local/bin/php /home/uXXXXX/script.php
В данном примере скрипт, который находится на диске сервера и имеет полный путь /home/uXXXXX/script.php, запускается в 1 час ночи каждый день. Не забывайте нажимать Enter после каждой строки в cron — все строки в сценариях cron должны заканчиваться переводом строки или задание работать не будет.
Вывод ошибок в PHP
Иногда возникает необходимость получить информацию о том, какие ошибки возникают при выполнении PHP-скриптов. При использовании PHP как модуля Apache (по умолчанию именно так) вывод ошибок доступен в панели управления в меню Древо услуг в разделе Домен domain.tld, где domain.tld — имя вашего домена, далее характеристика HTTP > error_log.
Иногда имеет смысл включить вывод ошибок PHP-скриптов на экран. Возможно 2 случая:
-
Если вы используйте PHP-интерпретатор как модуль Apache, создайте в той директории, где находятся скрипты, файл .htaccess (если он не существует) и добавьте 2 строки, одна из которых включает вывод ошибок в браузер, а вторая определяет уровень отображаемых ошибок:
php_flag display_errors on php_value error_reporting 2047Число 2047 является значением константы E_ALL и включает вывод всех типов ошибок. Значение константы E_ALL зависит от версии PHP. Точное значение можно узнать на сайте разработчика.
-
Если вы используете PHP-интерпретатор как CGI, то для вывода ошибок следует в файле настроек для PHP, изменить значение параметра
наdisplay_errors = Offdisplay_errors = OnКроме этого, надо изменить значение параметра error_reporting со значения E_ALL & E_NOTICE на простое E_ALL (по желанию).
Ошибки при выполнении PHP-скриптов могут быть разного типа. Полный список констант, определяющих тип отображаемых ошибок, может быть найден на сайте разработчика
Ограничения
Нужно учитывать, что на работу PHP налагаются некоторые ограничения. По соображениям безопасности мы запретили использование следующих команд:
- dl
- shell_exec
- exec
- system
- passthru
- popen
- proc_open
- proc_nice
- proc_get_status
- proc_close
- proc_terminate
- posix_mkfifo
- set_time_limit
В случае, если какие-то из этих команд все же однозначно вам необходимы, можно собрать собственный бинарный файл PHP и использовать его в cgi-режиме. Если же на самом деле вы хотите использовать функции вроде exec для выполнения периодических заданий вроде бэкапа баз MySQL, пожалуйста, используйте для этого cron. Если же нужно разово выполнить какую-то команду, можно использовать для этого UNIX shell.
Документация и полезные ссылки
В помощь вам мы приводим ссылки на полезные ресурсы по тематике PHP:
- Руководство по PHP — полная документация на русском языке с возможностью поиска
- Клуб разработчиков PHP — на русском языке
- Подборка статей по PHP — сервер CIT Forum