2009-08-28 2 views
0

У меня есть код, который динамически изменяет размер изображения и отправляет его в браузер.PHP создает файл изображения, но работает только на локальном dev, а не на удаленном сервере

Но он не работает должным образом ... только если я попрошу его вывести изображение в файл вместо браузера.

Я не думаю, что проблема заключается в моем коде, потому что эта проблема возникает только на реальном сервере; в моем компьютере его работа отлично.

Код:

$img = $_GET['img']; 

ini_set('allow_url_fopen', 'on'); 

$info = getimagesize($img); 
header('Content-type: '.image_type_to_mime_type($info[2])); 
Fotos::redimensiona($img, null, Fotos::MINIGAL_WIDTH, Fotos::MINIGAL_HEIGHT, false); 

Fotos :: redimensiona():

//[...] a whole bunch of code calculating dimensions, they just works 
// $funcImage is like 'imagejpeg'/'imagepng'/'imagegif', depends on file 
if ($arquivo) { 
    $funcImage($thumb, "$final.$ext"); 
    return "$final.$ext"; 
} 
else { 
    $funcImage($thumb); 
} 

Помните: работает на местном развитии, но не на удаленном веб-сервере.

[EDIT]
если я закомментировать header линию, двоичный код печатается; и этот код изменяется, когда я изменяю исходное изображение, как и ожидалось.
Но с header Firefox показывает мне URL-адрес страницы (например, http://www.sabianoar.com.br/novosabia/inc/phpImg.php?img=awful_escaped_long_path.jpeg), и если я делаю CTRL+I, это говорит мне, что это формат JPEG размером 0x0 и 10kb.
Opera показывает мне пустое изображение, как это будет делать, если я возложила <img> с неправильным src, т.е.

[EDIT2] EyeOfGnome говорит: «Не файл JPEG: начинается с 0xEF 0xbb», когда я попробуйте сохранить и затем открыть вывод (он обычно сохраняет файл .jpeg).

+0

Что происходит, когда он «не работает должным образом»? Это ошибка? Нет выхода? сломанное изображение? – NSSec

+0

Посмотрите на редактирование. =] Я только что добавил эту информацию ... – igorsantos07

ответ

3

Вывод кода BOM в начале. Откройте свой код с удаленного веб-сервера и проверьте (используя hex-редактор, например xxd), если он содержит спецификацию до <?php. Если BOM не находится в файле, который вы просматриваете, он может быть включен.

Некоторые редакторы добавляют спецификацию, и apache выводит ее. Вероятно, это то, что нарушает ваши изображения.

+0

спасибо SO MUCH \ o / – igorsantos07

0

Проверьте разрешения изображения/каталога, в котором находится изображение.

+0

Папка 777, а JPEG, 666. Оба являются читабельными. И я забыл сказать [я отредактирую вопрос], но если я прокомментирую строку 'header', будет напечатан двоичный код; и этот код изменяется при изменении исходного изображения. – igorsantos07

+0

Вы тоже пытались сделать JPEG 777? Я не знаю, будет ли это работать. Некоторое время назад я испытал причуду. – Randell

+0

Также проверьте источник HTML в браузере. – Randell

0

Это, вероятно, не причина, но почему вы эхом отдаете результат Fotos::redimensional()? Такие функции, как imagejpeg() и т. Д., Возвращают bool (а не данные изображения) после вывода изображения, поэтому вы закончите печать «1» до конца изображения. Я только что проверил это, и, похоже, он не разорвал jpeg-изображения.

+0

да ... это не сломается, потому что это работает на моем компьютере. во всяком случае, я удалил эхо. = P, но не решает мою проблему = ( – igorsantos07

0

Вы пытались сравнить локальную машину с сервером? Сравните вывод phpinfo(); Это разные платформы?

Смежные вопросы