php getimagesize динамически создаваемой картинки
Я пытаюсь определить, является ли файл image.php действительным файлом изображения. Это может быть или не быть, потому что, если БД имеет информацию об измененном изображении, оно будет действительным - image.php изменит исходное изображение и выведет его на экран. Существует также альтернатива - в базе данных отсутствует информация об имени файла, и это может привести к сообщению об ошибке или изображению ошибки. Я хотел бы получить размеры изображения, и если это ширина = 0 и высота = 0, то напечатать сообщение об ошибке. Я пытался сделать это с getimagesize, но он выдает ошибку:
[function.getimagesize]: не удалось открыть поток: нет такого файла или каталога в...
Путь на 100% правильный. Я читал, что невозможно изменить размер динамически создаваемой картинки через php. Я всегда могу проверить свою базу данных, но мне любопытно, есть ли какой-нибудь взлом, чтобы получить размер изображения, который динамически создается с помощью php.
Код:
$file = "image.php?img=1";
$a = getimagesize($file);
echo 'aaaaaaaaa' . $a;
РЕДАКТИРОВАТЬ:
Я сделал это по-другому, потому что ни одно из решений не сработало для меня - я просто проверяю базу данных на наличие правильного имени файла.
Спасибо за помощь.
2 ответа
Вы должны будете использовать полноценный абсолютный URL для PHP, чтобы понять, что вы запрашиваете URL. image.php?img=1
это просто запрос локальной файловой системы
$file = 'http://example.com/image.php?img=1'; // full-blown HTTP request
$file = 'image.php'; // local-only request
Но это несколько неэффективно, так как вы делаете полный запрос http в обе стороны. если этот URL-адрес защищен паролем / сеансом, вам сначала нужно будет войти в систему и т. д.
Если это изображение поступает из локальной базы данных, вам следует заново создать логику выборки или сделать ее пригодной для использования через вызов функции, чтобы он не выполнял HTTP-запрос и просто работал "внутри" в вашем сценарии, а затем передавал данные в GD's http://php.net/imagecreatefromtstring, которая будет принимать любой известный тип изображения, затем использовать функции imagesx() и imagesy() для получения высоты / ширины.
Вам нужно file_get_contents, так как image.php?img=1
не настоящий файл в вашей системе
$cont = file_get_contents($file);
$r = imagecreatefromstring($cont);
imagesx($r);
imagerx($r);
Конечно, вам нужен полный URL: http://etc