Итак, сразу скажу, не кодер я. Ошибки php-скриптов отлавливать не обучен, да и не было таких задач. Но сегодня пришлось самому въезжать в эти тонкости.
У моих знакомых был портал на одном хостинге, юзербары отображались. Потом перенесли ко мне на VPS свой портал и исчезли эти самые юзербары.
Так, думаю, надо посмотреть переменные php.ini. Как? Окей, лезу в гугл, читаю что нужно создать файлик произвольного названия с расширением php и запустить на вебсерваке. Впрочем об этом я писал уже тут.
Смотрю секцию про GD (это такая библиотека для работы с изображениями, есть еще менее популярный, но более функциональный Imagick)
gd
GD Support | enabled |
GD Version | 2.0 |
FreeType Support | enabled |
FreeType Linkage | with freetype |
FreeType Version | 2.4.0 |
T1Lib Support | enabled |
GIF Read Support | enabled |
GIF Create Support | enabled |
JPEG Support | enabled |
libJPEG Version | 6b |
PNG Support | enabled |
libPNG Version | 1.2.44 |
WBMP Support | enabled |
Directive | Local Value | Master Value |
---|---|---|
gd.jpeg_ignore_warning | 0 | 0 |
Смотрю,вроде бы всё как и должно быть. На всякий случай проверяю что в системе установлена библиотека libpng.
Так, теперь нужно как то протестировать скрипт. Рабочий скрипт ого-го какой, без спеца не разобраться, поэтому иду на офф сайт php и модифицирую готовый экзампл до следующего вида:
<?php
header("Content-type: image/png");
$string = $_GET['text'];
$im = imagecreatefrompng("test_png.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);
?>
Обзываю этот файл test_png.php и кидаю вместе с первой попавшейся картинкой (обозвал test_png.png) на вебсервак.
Такс, теперь нужно включить отладочную информацию, чтобы в случае чего я в браузере увидел бы ошибки php. Лезу в гугл. Наиболее правильный способ это сделать, это добавить следующие две строчки в файл .htaccess:
php_value display_errors 1
php_value error_reporting 2047
Пару слов про уровень репортинга ошибок:
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
• E_ALL - Все предупреждения и ошибки.
• E_ERROR - Критические ошибки времени выполнения.
• E_WARNING - Предупреждения времени выполнения.
• E_PARSE - Ошибки трансляции.
• E_NOTICE - Замечания времени выполнения (это такие
предупреждения, которые, скорее всего,
свидетельствуют о логических ошибках в
сценарии, - например, использовании
неинициализированной переменной).
• E_CORE_ERROR - Критические ошибки в момент старта PHP.
• E_CORE_WARNING - Некритические предупреждения во время старта PHP.
• E_COMPILE_ERROR - Критические ошибки времени трансляции.
• E_COMPILE_WARNING - Предупреждения времени трансляции.
• E_USER_ERROR - Сгенерированные пользователем ошибки.
• E_USER_WARNING - Сгенерированные пользователем предупреждения.
• E_USER_NOTICE - Сгенерированные пользователем замечания.
Запускаю свой тестовый скрипт как написано в мануале http://IP_or_DNS/test_png.php?text=test. Это значит что на картинке должно появится слово "test". Вместо картинки вполне ожидаемо получаю вожделенную ошибку:
Fatal error: Call to undefined function imagecreatefrompng()
Гуглю, оказывается что нужно установить пакет php5-gd и перезагрузить вебсервер. Этот пакет у меня не установлен. Ставлю его и картинки начинают отображаться. Это победа!
apt-get -y install php5-gd
Reading package lists... Building dependency tree... Reading state information... The following extra packages will be installed: libt1-5 The following NEW packages will be installed: libt1-5 php5-gd 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 38.9kB/208kB of archives. After this operation, 565kB of additional disk space will be used. Get:1 http://ftp.de.debian.org unstable/main php5-gd 5.3.2-2 [38.9kB] Fetched 38.9kB in 0s (210kB/s) Selecting previously deselected package libt1-5. (Reading database ... 59523 files and directories currently installed.) Unpacking libt1-5 (from .../libt1-5_5.1.2-3_amd64.deb) ... Selecting previously deselected package php5-gd. Unpacking php5-gd (from .../php5-gd_5.3.2-2_amd64.deb) ... Processing triggers for libapache2-mod-php5 ... Reloading web server config: apache2. Setting up libt1-5 (5.1.2-3) ... Setting up php5-gd (5.3.2-2) ... Installing new version of config file /etc/php5/conf.d/gd.ini ...
Помятуя о конфузе с GD, ставлю еще и php5-imagick на будущее.
apt-get -y install php5-imagick
Reading package lists... Building dependency tree... Reading state information... The following NEW packages will be installed: php5-imagick 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 125kB of archives. After this operation, 516kB of additional disk space will be used. Get:1 http://ftp.de.debian.org unstable/main php5-imagick 3.0.0~rc1-1 [125kB] Fetched 125kB in 0s (524kB/s) Selecting previously deselected package php5-imagick. (Reading database ... 59537 files and directories currently installed.) Unpacking php5-imagick (from .../php5-imagick_3.0.0~rc1-1_amd64.deb) ... Setting up php5-imagick (3.0.0~rc1-1) ... Replacing config file /etc/php5/conf.d/imagick.ini with new version
1 комментарий:
После переезда перестали воркать юзербары.
Фикс:
проверить что установлен и в apache2 включен mod_php5:
apt-get install -y libapache2-mod-php5
Отправить комментарий