Проблема с imagepng - PullRequest
       23

Проблема с imagepng

0 голосов
/ 19 августа 2010

Я борюсь с библиотекой PHP GD.

Я написал скрипт с именем foo.php, который выводит png:

header('Content-type:image/png');
$img = imagecreatefrompng($url) or die('bad url:'.$url);
imagepng($img);
imagedestroy($img);

Он работает нормально.Его цель - принять параметр GET и затем выпустить соответствующий граф:

(например) foo.php?id=2 помещает хороший график в любой браузер.

Вот моя проблема:

В другом скрипте (baz.php) я хотел бы использовать readfile или что-то подобное, чтобы взять изображение, созданное foo.php, и сделать так, чтобы baz.php отправил его в браузер. Но что бы я ни пытался, это не сработает, когда я вызываю baz.php

Пример из baz.php:

switch($id) {
    case '1':
         readfile('foo.php?id=1');
         break;
    case '2':
         readfile('foo.php?id=2');
         break;
    // and so on...
}

Я получаю сообщение об ошибке:

failed to open stream: No such file or directory...

Если указать полный URL-адрес или путь:

readfile('http://localhost/dev/foo.php?id=1');
readfile('C:/xampp/htdocs/dev/foo.php?id=1');

... Я получаю ту же ошибку.

Если я добавлю заголовок в baz.php:

header('Content-type:image/png');
readfile($url);

В Firefox я получаю «Изображение» http://localhost/dev/baz.php" не может быть отображено, потому что оно содержит ошибки.В Chrome он показывает разорванное изображение размером 27,82 КБ с размерами 0x0

allow_url_fopen включено, и, как я уже говорил, foo.php без проблем создает pngs;Я просто не могу получить доступ из baz.php, который мне нужен.

Я могу, например, просто положить:

header("Location: foo.php?id=1");

, и он будет перенаправлять и выводитьизображение, но я не хочу делать перенаправление 302, Мне нужен baz.php, чтобы вытолкнуть изображение в браузер. Если я сохраню файл как статический файл, он будет загружен какЧто ж. Кажется, он не хочет обрабатывать динамический файл.

Любая помощь очень ценится.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 19 августа 2010

Разобрался:

Выпуск № 1:

Вы не можете использовать php readfile() для включения png, который динамически генерируется php , если он находится на том же сервере .

Почему? Поскольку readfile будет включать в себя необработанный php-код, а не выводить этот php-код в изображение . Если вы хотите вызвать его с другого сервера, readfile работает нормально.

Итак, вы можете вместо этого включить / потребовать файл (чтобы он отображался в png), однако ...

Выпуск № 2:

Вы не можете напрямую включить файл с параметрами / строкой запроса (например, следующий код выдаст ошибку, что он не сможет открыть файл:

include('baz.php?id=1'); //this won't work

Решение:

  • Установите параметр вручную в строке GET (например, $_GET['id'] = 1;)
  • Включить файл: include('baz.php');

Также обратите внимание: команда Apache virtual() также не будет работать с GET, поскольку передается только QUERY_STRING ($ _GET копируется из родительского скрипта):

Виртуальное описание PHP.net ()

0 голосов
/ 19 августа 2010
...