Ошибка 500 при смене версии php

12
nikonlay
На сайте с 11.12.2006
Offline
176
#11

edogs, Sitealert - спасибо за советы! SeVlad - еще раз спасибо.

Итак, следуя всем советам что сделал - переключил сразу на 5.6, сайт снова перестал работать, как и с 5.4

Далее, стал смотреть логи сервера, но, то ли не там смотрел, то или не знаю, но ничего толкового не нашел.

В access_log вижу только записи вида:

128.68.145.125 - - [31/Jul/2017:15:48:49 +0300] "GET / HTTP/1.0" 500 - "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"

164.132.161.82 - - [31/Jul/2017:15:49:29 +0300] "GET /theforumnewpost.php?cat_id=2&upforum_id=9&forum_id=31 HTTP/1.0" 500 - "-" "Mozilla/5.0 (compatible; AhrefsBot/5.2; +http://ahrefs.com/robot/)"

Которые ничего нового, кроме того, что ошибка 500 не говорят

В error_log почему-то вообще ничего нету на это время, когда сменил версию. Хотя вроде ведь как раз там должна ошибка 500 записываться? Но почему-то нет. И в rewrite.log тоже ничего нет

Далее, стал по очереди удалять строки из .htaccess

Удалил php_flag rewriteLogLevel 0 - не помогло.

Вернул пред., удалил php_value allow_url_fopen on - тоже не помогло.

Удалил обе эти строки - тоже не помогло.

Удалил еще и php_value open_basedir /dir/incl/ - вот теперь помогло, заработал сайт.

Ради интереса вернул

php_flag rewriteLogLevel 0

php_value allow_url_fopen on - Продолжает работать!

То есть, похоже ошибка была в этом php_value open_basedir /dir/incl/

И, SeVlad, вас понял, пойду смотреть, как все это в php.ini прописать.

И заодно пойду исправлять ошибки, а то когда пробовал все 4 строки удалять, включая php_flag display_errors off

то сайт работал, но куча нотисов повылезало, надо бы поправить.

А потом тогда попробую на 7.0 переключить, может, если на 5.6 заработал, то и на 7 будет работать

Мощные фонари и бинокли: https://market.yandex.ru/store--volny-i-veter?businessId=79203856
SeVlad
На сайте с 03.11.2008
Offline
1609
#12
nikonlay:
пойду смотреть, как все это в php.ini прописать.

Не нужно это ВСЁ прописывать.

Нужно разобраться по каждой директиве, прочитав по ней мануал. После поискать её в php.ini и если нужно - изменить значение.

Вот см. Тот же allow_url_fopen - Sitealert указал, а я дал ссылку, чтобы ты прочитал про неё. См в ман - она дефолтно итак включена. Зачем ещё раз её включать в хтацессе? Она что, в php.ini отключена? И вот так по каждой разберись.

Хтацесс - это кусок php.ini для одного сайта. Если для всех сайтов нужны одни настройки, а для какого-то сайта другие, то в хтасссе они переопределяются.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
nikonlay
На сайте с 11.12.2006
Offline
176
#13

SeVlad, спасибо, учел это.

Я не знаю, может отдельную тему под этот вопрос создать, но оно связано все-таки, пока тут спрошу.

Вчера заметил, что в некоторых местах того же сайта перестали отображаться картинки после смены версии php с 5.2 на 5.6

Картинки выводятся таким образом:

<img src="/resizeimg.php?f=backdoor/image/photo/1900aea2e9270e4746fbd6ee6151ff04.jpg&w=90" >

А код resizeimg.php такой:

<?
$f = htmlspecialchars(addslashes($_REQUEST['f']));
$width = intval($_REQUEST['w']);

$size_img = getimagesize($f);
$w_src = $size_img[0];
$h_src = $size_img[1];

if(!empty($width))
{
$w = $width;
}else{
$w = 90;
}
$q = 100;

if(exif_imagetype($f) == IMAGETYPE_JPEG)
{

$src = imagecreatefromjpeg($f);
$w_src = imagesx($src);
$h_src = imagesy($src);


$dest = imagecreatetruecolor($w,$w);


if ($w_src>$h_src)
imagecopyresized($dest, $src, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));


if ($w_src<$h_src)
imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));


if ($w_src==$h_src)
imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src);



header("Content-type: image/jpeg");
imagejpeg($dest,'',$q);

}

imagedestroy($dest);
imagedestroy($src);
?>

И в php 5.2 все нормально работает, а в 5.6 - не отображается картинка. Причем включил отображение всех ошибок - ничего не выдает, даже нотисов, но картинку не выводит почему-то

bay_ebook
На сайте с 28.05.2010
Offline
111
#14

<?

замените для начала на

<?php
Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
S
На сайте с 30.09.2016
Offline
469
#15
nikonlay:
в некоторых местах того же сайта перестали отображаться картинки после смены версии php с 5.2 на 5.6

Скрипт или работает на этой версии PHP, или не работает. А "в некоторых местах" - это не обязательно в этом скрипте дело, в тех местах могут и другие скрипты косячить.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
nikonlay
На сайте с 11.12.2006
Offline
176
#16

bay_ebook, заменил, не помогло.

Sitealert, так я тоже так думал - но работает, остальная часть сайта нормально отображается, именно картинка не выводится

Вот, как выглядит:

каких-то других скриптов там нет, только php-код, я привел его выше. Чтобы лучше звучало, перефразирую - в 5.6 работает, но не так, как нужно и не так, как в 5.2 - в 5.2 картинка отображается, в 5.6 - нет

А вот как открывается, если на эту картинку навести и сделать "открыть картинку в новой вкладке":

nikonlay
На сайте с 11.12.2006
Offline
176
#17

Ууф, эврика! Нашел то есть.

Столько дней это искал - жесть. И сейчас полдня просидел. В итоге, в отчаянии закомментировал в resizeimg.php вывод заголовка и картинки, и каждую переменную заставил выводить на экран:

<?php
$f = htmlspecialchars(addslashes($_REQUEST['f']));
$width = intval($_REQUEST['w']);

echo "1: ".$f."<br>";

echo "2: ".$width."<br>";

$size_img = getimagesize($f);
$w_src = $size_img[0];
$h_src = $size_img[1];

echo "3: ";
var_dump ($size_img);
echo "<br>";

echo "4: ".$w_src."<br>";
echo "5: ".$h_src."<br>";

if(!empty($width))
{
$w = $width;
}else{
$w = 90;
}
$q = 100;

echo "6: ".exif_imagetype($f)."<br>";

if(exif_imagetype($f) == IMAGETYPE_JPEG)
{

echo "7: "."babushka"."<br>";
// создаём исходное изображение на основе
// исходного файла и опеределяем его размеры
$src = imagecreatefromjpeg($f);
$w_src = imagesx($src);
$h_src = imagesy($src);

echo "8: ";
var_dump ($src);
echo "<br>";

echo "9: ".$w_src."<br>";
echo "10: ".$h_src."<br>";


// создаём пустую квадратную картинку
$dest = imagecreatetruecolor($w,$w);

echo "11: ";
var_dump ($dest);
echo "<br>";

// вырезаем квадратную серединку по x, если фото горизонтальное
if ($w_src>$h_src)
imagecopyresized($dest, $src, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

echo "12: ";
var_dump ($dest);
echo "<br>";
echo "13: ";
var_dump ($src);
echo "<br>";

// вырезаем квадратную верхушку по y,
// если фото вертикальное (хотя можно тоже серединку)
if ($w_src<$h_src)
imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));

// квадратная картинка масштабируется без вырезок
if ($w_src==$h_src)
imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src);

// вывод картинки и очистка памяти

// header("Content-type: image/jpeg");
// imagejpeg($dest,'',$q);

}elseif(exif_imagetype($f) == IMAGETYPE_GIF) {

echo "88: "."dedushka"."<br>";


// создаём исходное изображение на основе
// исходного файла и опеределяем его размеры
$src = imagecreatefromgif($f);
$w_src = imagesx($src);
$h_src = imagesy($src);

// создаём пустую квадратную картинку
$dest = imagecreatetruecolor($w,$w);

// вырезаем квадратную серединку по x, если фото горизонтальное
if ($w_src>$h_src)
imagecopyresized($dest, $src, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

// вырезаем квадратную верхушку по y,
// если фото вертикальное (хотя можно тоже серединку)
if ($w_src<$h_src)
imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));

// квадратная картинка масштабируется без вырезок
if ($w_src==$h_src)
imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src);

// вывод картинки и очистка памяти

// header("Content-type: image/jpeg");
// imagejpeg($dest,'',$q);

// imagegif($dest,'','');
// header("Content-type: image/gif");
}

imagedestroy($dest);
imagedestroy($src);
?>

Каково же было мое отчаяние, когда он вывел все нормально!:

1: http://www.site.ru/backdoor/image/photo/1900aea2e9270e4746fbd6ee6151ff04.jpg
2: 90
3: array(7) { [0]=> int(600) [1]=> int(400) [2]=> int(2) [3]=> string(24) "width="600" height="400"" ["bits"]=> int(8) ["channels"]=> int(3) ["mime"]=> string(10) "image/jpeg" }
4: 600
5: 400
6: 2
7: babushka
8: resource(8) of type (gd)
9: 600
10: 400
11: resource(9) of type (gd)
12: resource(9) of type (gd)
13: resource(8) of type (gd)

Ничего не понятно - все работает - и не работает!

И тогда уже, я посмотрел еще ниже, на функцию imagejpeg(), которую я закоментировал, и в самом низу вижу список изменений:

5.4.0 Запрещено задавать to пустой строкой для его пропуска..

А у меня как раз так и было - пустой строкой. Заменяю '' на NULL - и вуаля - все заработало! Вот как бывает, оказывается.

При том что никаких ошибок и предупреждений пхп не выдавал - просто не делал.

Оставлю это тут, чтобы если кто с таким столкнется, то знал, в чем дело.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий