我有这段代码,如果生成了图像,应该显示图像,如果没有,则写"no image"
<body>
<?php
$src = "somescript.php";
// if (getimagesize($src)) {
if (file_exists($src)) {
echo '<img src="'.$src.'" />';
} else {
echo "no image";
}
?>
</body>
somescript.php
是生成图像的本地文件,或者die();
问题是:file_exists
条件总是不返回任何东西。getimagesize
条件总是返回"failed to open stream"。
有人知道怎么让它工作吗?
除非您将完整的URL传递给filexists()
,否则它将在本地文件系统路径上工作,该路径可能与您传递给<img>
标记的图像的URL没有任何关系。例如
- 你的脚本是/home/sites/example.com/html/foo/picture.php
- 你的图片存放在/home/sites/example.com/html/images/…
- 你试图将/images/foo.jpg传递给标签
则将执行以下url ->路径查找:
您通过file_exists('/images/foo.jpg')
: PHP将检查本地系统路径/images/foo.jpg
。您没有从服务器的根目录提供站点服务,因此此操作失败。
您尝试file_exists('images/foo.jpg')
: PHP将检查/home/site/example.com/html/foo/images/foo.jpg
-您的脚本运行目录的子目录。Also不存在,你得到false
您通常不能像您看起来那样混合使用文件系统空间和url空间路径。这两个空格是相关的,但不是直接相连的
试试这个代替file_exists
$src = 'somescript.php';
$src_headers = @get_headers($src);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
由于对于每个请求只生成一次图像似乎是合适的,因此我将在客户端处理此问题。
你可以在文档加载时使用jQuery获取图像,并决定是显示图像还是不显示图像
或者您可以保留img
标记,但使用javascript来检测图像中的错误:
#mynoimg { display: none; }