从数据库读取路径时,PNG文件是无效错误,但如果路径是硬编码的,则可以工作


PNG file is not valid error when reading path from DB but works if the path is hardcoded

我使用Apache 2在Ubuntu上运行PHP 5.2。

当我想从PHP文件中提供一个硬编码的PNG文件(使用$imgname)时,我可以成功。但是,如果我将$imgname更改为$imgdbname,浏览器将失败,并表示它不是有效的PNG文件。

$imgname = "cachepics/c3s9taopkp.png";
$imgdbname = readfromdb();
header("Content-type: image/png");
print file_get_contents($imgname);

然而,如果我对header("Content-type: image/png");行进行注释,浏览器会在这两种情况下显示所有PNG垃圾文本。因此,我确信PHP实例能够通过从DB读取路径来访问该文件。

的输出

print "-".$imgname."-".$imgdbname."-";

看起来完全一样。

-cachepics/c3s9taopkp.png-cachepics/c3s9taopkp.png-

我会发疯,不知道为什么数据库版本不起作用。

也许问题是readfromdb有错误并生成警告,将这些警告打印到STDIO,向生成的图像添加垃圾,或者中止任何后续的标头(如内容类型)。您可能会检查服务器错误日志(无法添加任何样式"标头"的警告,因为已打印在文件..中),或者测试两个结果文件的大小是否相同。

我不知道你遇到这个问题的原因,但请使用readfile直接用PHP输出文件的内容。