Проблема с созданием образа php GD - PullRequest
1 голос
/ 20 мая 2010

С помощью следующего кода мой браузер возвращает «изображение не создано или не сохранено». Уверяю вас, местоположение изображения существует. Поэтому строка внутри оператора if по какой-то причине возвращает false, и да, GD установлен. Есть идеи?

if ($img = @imagecreatefromjpeg("/var/www/images/upload/1/1.jpg")) {

            die("image was created");

     } else {

         die ("image was not created or saved");

     }

ОК, я сделал это:

<?php

error_reporting(E_ALL);

if (fopen('/var/www/images/upload/1/1.jpg')) {

    echo 'file was opened';

} else {

    echo 'file was not opened';

}


?>

Возвращает, что файл не открывался каждый раз, группа apache имеет все разрешения для всех этих папок. GD или PHP - это другое имя пользователя?

После выполнения is_readable () из тестового скрипта он вернул true. В чем еще может быть проблема?

Итак ... когда я запускаю скрипт:

error_reporting(E_ALL);
imagecreatefromjpeg("/var/www/images/upload/1/1.jpg");
print_r(error_get_last());
echo ("hi");

Я получаю белый экран смерти. Если я закомментирую строку imagecreatefromjpeg, на экране отобразится «hi»

Только что попробовал это на 500k jpg изображении, чтобы увидеть, если это проблема с памятью, но все равно получил белый экран.

Когда я запускаю imagecreatefromjpeg в операторе if и запускаю скрипт через терминал, imagecreatefromjpeg имеет успех! = \ До сих пор не могу понять, почему это не сработало бы иначе. РЕДАКТИРОВАТЬ: Запуск этого точного сценария через мой браузер также является успешным.

Ответы [ 4 ]

5 голосов
/ 20 мая 2010

Очевидно, что значение $ img не равно true.

Извините, это было слишком много, чтобы сопротивляться ... моя точка зрения была такова, что нет необходимости во всей этой другой ерунде в вашем посте.

Создание изображения может завершиться неудачей, если процесс не может прочитать файл. попробуйте открыть файл для чтения. также избавьтесь от подавления ошибок перед вызовом функции (@). Затем установите error_reporting на E_ALL, а display_errors - на.

Обновление: если fopen не работает, то у пользователя, запускающего php, нет прав на чтение файла. Попробуйте использовать fopen и fwrite, чтобы записать файл в / tmp, чтобы увидеть, под каким пользователем запущен ваш процесс php / apache. Затем убедитесь, что у пользователя есть права на чтение. Или вы можете просто попробовать изменить файл в o + r, чтобы подтвердить, что доступ для чтения для всех решает нашу проблему.

0 голосов
/ 20 мая 2010

Попробуйте использовать error_get_last () (PHP> = 5.2) или $ php_errormsg, чтобы увидеть, что возвращают функции img * ().

Кроме того, лучший способ проверитьЧитаемость файла, как ни странно, is_readable (), а не fopen.

0 голосов
/ 20 мая 2010

Возможно, у вас нет прав доступа к файлу.

Если ваш localhost отображается на var / www, вам не нужно вызывать этот файл. Просто используйте путь относительно пути к файлу PHP.

0 голосов
/ 20 мая 2010

Убедитесь, что у сценария есть привилегия для доступа к /var/www/images/upload/1/1.jpg, помня, что ваш веб-сервер (если это не скрипт CLI) может работать от имени другого пользователя, чем вы ожидаете

...