http://www.php.net/
http://ru.wikipedia.org/wiki/PHP
Модули php в Debian:
http://packages.debian.org/source/squeeze/php5
Список типичных модулей php
Для работы моих php-сайтов мне нужны следующие модули:
php7.0 - server-side, HTML-embedded scripting language (metapackage)
php7.0-bz2 - bzip2 module for PHP
php7.0-cli - command-line interpreter for the PHP scripting language
php7.0-common - documentation, examples and common module for PHP
php7.0-curl - CURL module for PHP
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.0-gd - GD module for PHP
php7.0-imagick -
php7.0-json - JSON module for PHP
php7.0-mbstring - MBSTRING module for PHP
php7.0-mysql - MySQL module for PHP
php7.0-opcache - Zend OpCache module for PHP
php7.0-pdo -
php7.0-pdo-mysql -
php7.0-pdo-pgsql -
php7.0-pgsql - PostgreSQL module for PHP
php7.0-readline - readline module for PHP
php7.0-sqlite3 - SQLite3 module for PHP
php7.0-xdebug -
php7.0-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP
php7.0-zip - Zip module for PHP
Замечания по PHP
Комментарии для ini файлов php - «;», а не "#"
Чтобы PHP взаимодействовал с MySQL должен быть установлен модуль php-mysql
/etc/php5/apache2/php.ini - конфигурационный файл php
register_globals=off - писать скрипты c расчетом на такое значение опции(безопасность)
mbstring.detect_order = auto — порядок кодировок, т.е. как интерпретатор PHP пытается расшифровать строки
mb_detect_order() - функция php, выдающая порядок разбора кодировок
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
iconv_get_encoding('all') - функция php, позволяющая посмотреть соответствующие параметры php
Загруженные PHP-модули
В директории DocumentRoot(обычно /var/www/html) сервера Apache создаем текстовый файл test.php : …#cat > test.php
Далее вводим в файл код <?phpinfo();?> или <?print_r (get_loaded_extensions());?>
После этого вводим в браузере URI: http://localhost/test.php
sudo apt-get install php5-cli - установка командного интерпертатора
Установленный командный интерпретатор позволяет нам выполнять из терминала обращения к команде "php":
php -v - посмотреть версию php
php -m - посмотреть список модулей
php --ri gd -информация о модуле php
Модули PHP - включение и выключение
Список модулей, доступных для php можно увидеть здесь:
/etc/php5/mods-available/
Список модулей, которые загрузит веб-сервер при старте(рестарте):
/etc/php5/conf.d/
здесь находятся символические ссылки на файлы из /etc/php5/mods-available/
Ссылку можно сделать вручную, можно сделать при помощи команды:
php5enmod xsl - создание ссылки
php5dismod xsl - удаление ссылки на модуль xsl
/etc/init.d/apache2 reload - не забываем сделать релоад апачу после изменения списка рабочих модулей (/etc/php5/conf.d/)
Отладка в PHP
За вывод сообщений отвечают 2 опции в /etc/php5/apache2/php.ini, которым нужно задать указанные значения:
error_reporting = E_ALL
display_errors = On
Также ошибки пишутся /var/log/apache2/error.log вне зависимости от значения этих опций
Если display_errors = Off, то при возникновении ошибок браузер нам будет выдавать что-то вроде:
Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация.
Любые попытки из любого места включить выдачу ошибок в браузер обречены на неудачу, пока мы не включим
display_errors = On
До тех пор мы сможем наблюдать эти ошибки только в /var/log/apache2/error.log
Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут отображаться. display_startup_errors также включаем для отладки
display_startup_errors = On
После изменения файла /etc/php5/apache2/php.ini нужно перезапустить апач, чтобы изменения вступили в силу
#/etc/init.d/apache2 restart
Установка CURL для PHP
sudo apt-get install php5-curl - установка
sudo /etc/init.d/apache2 restart - перезапускаем Apache
Установка драйвера PDO PostgreSQL
sudo apt-get install php5-pgsql
sudo /etc/init.d/apache2 restart
Грабли
Загрузка файлов
За загрузку файлов отвечают следующие опции в php.ini
file_uploads (on|off)
upload_tmp_dir (меняется только в Apache или в php.ini)
"You probably tried to upload too large file.
Please refer to documentation for ways to workaround this limit"
Возникает при попытке загрузить большой файл через импорт в phpmyadmin
Если phpmyadmin работает под сервером apache2, то ищем конфигурационный файл php /etc/php/7.0/apache2/php.ini, в нем меняемопции:
upload_max_filesize
memory_limit
post_max_size
и редактируем в сторону увеличения; ставил 32МБ, 32МБ и 64МБ соответственно
После чего делаем рестарт apache2: sudo /etc/init.d/apache2 restart
Для nginx, который работает в связке c php-fpm, ищем конфигурационный файл
/etc/php/7.0/fpm/php.ini и изменяем в нем соответствующие параметры:
memory_limit
post_max_size
Далее в настройках хоста nginx вносим директиву client_max_body_size
server {
...
client_max_body_size 10M;
...
}
После этого рестартуем nginx: sudo /etc/init.d/nginx restart
а также сервис php-fpm:
/etc/init.d/php7.0-fpm restart
Превышение дискового пространства
Что у нас творится с дисковым пространством, можно узнать при помощи команд df -h, df -i
По отчетам с веб-панели хостинга все отлично, но дисковая квота выбрана. Может быть связано с большим количеством файлов, что может быть вызвано тем, что php пишет очень много сессионных файлов.
df -i - проверяем использование инодов. При превышении числа узлов(превышен лимит DISKINODES) можно снизить количество файлов таким способом:
Создаем файл /etc/php5/conf.d/sess.ini с содержимым из 3-х строчек:
session.gc_probability = 1 (специфицирует вероятность того, что утилита gc (garbage collection/сборщик мусора) стартует при каждом запросе, в процентах. По умолчанию 1)
session.gc_divisor = 1000 (Знаменатель значения, определяющего вероятность активизации сборщика мусора)
session.gc_maxlifetime = 1440 (время в секундах, в течение которого хранятся файлы сессий)
Перезапускаем WEB-сервер - /etc/init.d/apache2 restart
/var/lib/php5 - директория, где лежат сессионные файлы на стороне сервера, этот путь можно узнать из опции session.save_path или при помощи функции session_save_path()
Время хранения сессионных файлов
/etc/php5/apache2/php.ini
session.gc_maxlifetime - параметр, определяющий время храениния сессионых файлов в секундах
Также файлы могут чиститься по cron-у системными скриптами, например
/etc/cron.hourly/custom-rm-phpsess
#!/bin/bash
T=$(($RANDOM/27))
sleep $T
find /tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +1440 -delete
find /var/www/*/data/*tmp/ -nowarn -type f -name "sess_*" -amin +1440 -delete
find /var/tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +1440 -delete
find /var/lib/php*/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +1400 -del
Старый php-код
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
session.bug_compat_42 = 1 — меняем 1 на 0
session.bug_compat_warn = 1
PHP и работа с файлами
Если мы работаем с файлами на хостинге, то у нас должны быть права на те папки, где создаются, читаются или модифицируются файлы. Apache2 работает от пользователя www-data
Соответственно проверяем, чтобы у данного пользователя были соответствующие права на папку.
XSLT
Fatal error: Class 'XSLTProcessor' not found
aptitude install php5-xsl
/etc/init.d/apache2 restart
GD - Call to undefined function imageAntiAlias()
Fatal error: Call to undefined function ImageAntiAlias() при подключенном модуле в Debian GNU/Linux 6.0.6 (squeeze) возникает по причине, что данная функция отключена в php поскольку в ней есть ошибки, приводящие к утечкам памяти. Можно перекомпилировать php со встроенной поддержкой этих функций
php --re gd - информация о модуле (gd)
php --re gd | grep "Function" - список функций библиотеки GD
php -r "var_dump(gd_info());" - информация о библиотеке gd
Fatal error: Call to undefined function imageAntiAlias()
php -m | grep -i gd
php -r "var_dump( function_exists('imageantialias'));"
imageTtfText - не хочет рисовать картинку
1) Проверить, что в системе есть ttf шрифты
(/usr/share/fonts/truetype)
2) Проверить, что в функции указан абсолютный путь к файлу и что у пользователя, под которым запускается веб-сервер, есть доступ к файлу шрифта (нужные шрифты можно скопировать в местоположение нашего сайта)
3) Что не лазить в лог апача за ошибками можно включить вывод всех ошибок в окно браузера, а также убрать header("Content-type: image/xxxx"), чтобы не рисовалась битая картинка, а выводились ошибки.
ImageMagic
apt-get install imagemagick
Установленная версия
convert -version
Version: ImageMagick 6.6.0-4 2015-05-28 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC
Features: OpenMP
Установка php-imagick
apt-get install php5-imagick
После чего нужно перезагрузить Apache