Путь для функции PHP getimagesize () - PullRequest
1 голос
/ 07 января 2020

Для getimagesize (), какой правильный путь использовать для файла? В моем случае я предпочитаю абсолютный путь, но он дает ошибку, что нет файла, но когда я даю ему полный URL-адрес, нет ошибок, но нет и вывода. Изображения показывают, но не атрибуты getimagesize ().

Чтобы уточнить, изображения хранятся в базе данных с помощью сценария, извлекающего их и предоставляющего заголовки, которые в данном случае делают это изнутри foreach l oop, поскольку он вытягивает несколько изображений для динамического меню c. Я успешно делал это в прошлом на других сайтах, и этот код взят с одного из этих рабочих сайтов, поэтому не уверен, почему он не будет работать здесь!

Вопрос в том, каков правильный тип пути и почему не выводится?

Это (предпочтительно) выдает ошибки отсутствия изображения:

list($width, $height, $type, $attr) = getimagesize("/internals/viewers/show_image.php?ID=$MenuImage");
$imagetags = (!empty($attr)) ? $attr : "";

Это также не дает никаких атрибутов:

list($width, $height, $type, $attr) = getimagesize("http://domain.loc/internals/viewers/show_image.php?ID=$MenuImage");
$imagetags = (!empty($attr)) ? $attr : "";

Изображения, отображаемые с использованием :

echo "$MenuLink<img src=\"/internals/viewers/show_image.php?ID=$MenuImage\" alt=\"$MenuName\" title=\"$MenuDescription\" class=\"MenuTab\"$imagetags></a>\n";

Вот show_image. php:

<?php include $_SERVER ['DOCUMENT_ROOT'] . "/internals/configuration/common.php";

$ImageID = (isset($_GET['ID'])) ? $_GET['ID'] : "";

if (!$ImageID) die ("No image");

    $sqlImage = "SELECT Image, ImageFormat FROM images WHERE ID='$ImageID'";
    $rowImage = DBConnect($sqlImage, "Select", $siteDB);

if (!empty($rowImage)) :
    $mime_type = $rowImage['ImageFormat'];
    $SiteImage = $rowImage['Image'];
    header("Pragma: no-cache");
    header("Content-type: image/$mime_type");
    echo $SiteImage;
    imagedestroy($SiteImage);
endif; ?>

1 Ответ

1 голос
/ 07 января 2020

Если вы используете это на Linux или MacOS, запуск пути с / запускает его с root всего жесткого диска . Поскольку PHP работает на стороне сервера, он не знает, где находится root вашего каталога веб-сервера. Было бы лучше использовать что-то вроде /opt/apache/htdocs/internals/viewers (просто пример) или относительный путь. Обычно я использую относительные пути.

РЕДАКТИРОВАТЬ: Вы можете попробовать использовать getimagesize($_SERVER['DOCUMENT_ROOT'] . "internals/viewers/show_image.php?ID=$MenuImage"), что, вероятно, будет работать в вашем случае.

ДРУГОЕ РЕДАКТИРОВАНИЕ: Поскольку ваше изображение на самом деле не является файлом изображения, вы можете передать URL http:// или https:// в ваш вызов getimagesize(). Вот пример: getimagesize("http://" . $_SERVER['HTTP_HOST'] . "/internals/viewers/show_image.php?ID=$MenuImage");

...