PHP getimagesize() 函数的路径

Path For PHP getimagesize() Function

对于 getimagesize(),文件使用的正确路径是什么?在我的例子中,我更喜欢绝对路径,但它给出了一个没有文件的错误,但是当我给它一个完整的 URL 时,没有错误但也没有输出。图像显示但不显示 getimagesize() 的属性。

为了澄清,图像存储在一个数据库中,脚本将它们拉出来并提供 headers,在这种情况下,它是在 foreach 循环中这样做的,因为它正在拉出多个图像动态菜单。我过去在其他网站上成功地做到了这一点,这段代码来自其中一个工作网站,所以不确定为什么它在这里不起作用!

问题是,正确的路径类型是什么,为什么没有输出?

这(首选)给出了没有图像的错误:

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; ?>

假设您在 Linux 或 MacOS 上 运行,以 / 开始的路径从整个硬盘驱动器的 根目录开始。因为 PHP 在服务器端运行,所以它不知道您的 Web 服务器目录的根目录在哪里。最好使用 /opt/apache/htdocs/internals/viewers 之类的东西(仅作为示例)或相对路径。我一般用相对路径。

编辑: 您可以尝试使用 getimagesize($_SERVER['DOCUMENT_ROOT'] . "internals/viewers/show_image.php?ID=$MenuImage"),这可能适用于您的情况。

另一项编辑: 因为您的图像实际上不是图像文件,所以您可以传递 http://https:// URL 进入您的 getimagesize() 电话。这是一个示例:getimagesize("http://" . $_SERVER['HTTP_HOST'] . "/internals/viewers/show_image.php?ID=$MenuImage");