我有一个MySQL表,我将用户头像存储为blob。我使用名为avatar.php的脚本获取这些图像,该脚本输出图像。要请求特定的用户图像,您必须调用avatar.php?id =(用户ID)。为了使动态图像名称漂亮,我在.htaccess中添加了一个URL重写,这样你也可以调用avatar-(userid).jpg,它将转换为avatar.php?id =(userid)。
现在我想获取用户图像并使用GD进行操作。我尝试使用getimagesize()和imagecreatefromjpeg(),但我不断得到“无法打开流没有这样的文件或目录”错误。我尝试使用这些函数的脚本,作为avatar.php脚本,在根目录中。我试过了:
getimagesize('avatar.php?id=1');
getimagesize('./avatar.php?id=1');
getimagesize('/avatar.php?id=1');
...and the same but using avatar-1.jpg instead.
当我使用我网站的完整网址(包括http://等)时,它确实有用......但我还没找到原因。
// 修改: 使用file_exists()函数时会发生类似的问题。如果我尝试file_exists('。/ avatar.php')它返回true,如果我添加get-vars则返回false。这些功能是否不适合动态文件?
有人可以帮帮我吗?
提前致谢
答案 0 :(得分:2)
getimagesize
需要 文件路径 。 getimagesize('avatar.php?id=1')
尝试在本地硬盘上打开文件avatar.php?id=1
,这当然不存在
如果您使用getimagesize('http://example.com/avatar.php?id=1')
,则可以理解该路径是一个URL,它将通过HTTP包装器。基本上,getimagesize
仍然认为它打开了一个本地文件,但PHP将在后台通过HTTP请求获取该文件。由于该HTTP请求实际上返回了有效的图像文件,因此可以使用
当然,每次尝试打开图像时,不都希望使用您的Web服务器,因为这是不必要的资源浪费。事实上,即使getimagesize('avatar.php?id=1')
按照你认为的方式工作,对于你想要做的事情来说仍然是很多开销。
如果您的图像存储在数据库中,当您将图像放入数据库并将其存储在数据库列中时,请确定图像尺寸一次。然后只需从数据库中查询大小。
使用file_exists()函数时会出现类似问题。如果我试试 如果我添加get-vars,它会返回true
file_exists('./avatar.php')
返回false。这些功能是否不适合动态文件?
所有这些功能都需要 文件路径 。 avatar.php
是有效的文件名/路径。 avatar.php?foo=bar
不是有效的文件名/路径。后者是(部分)URL。 URL与本地文件系统无关。它们仅通过Web服务器处理,该服务器可能会也可能不会调用磁盘上的PHP或其他文件。您需要区分文件路径和 URL 的概念。
答案 1 :(得分:2)
如果您只想要图像尺寸而不需要任何操作,可以使用getimagesizefromstring
答案 2 :(得分:1)
它不起作用,因为getimagesize
试图打开php文件,而不是php文件在解析和执行时输出的“图像”。
这也是完整URL工作的原因:您的脚本请求来自您的网络服务器的输出,并且网络服务器执行脚本(从数据库加载图像并输出它)。
通过网络服务器加载(使用完整的URL)可能仍然是最简单的选择。
您还可以使用imagecreatefromstring
(link)创建图像资源,从数据库中提供结果,然后对其进行操作。