我有一个PHP脚本渲染图像(带有imagick)并将其保存到某个目录"SITE_ROOT.$filePath"
,然后执行header('Location: ' . SITE_ROOT.$filePath)
,它重定向到的文件是png图像。
如果我直接进入路径,就像在URL栏中输入一样我可以保存图像,一切正常,但是当我依靠脚本重定向我时,我尝试右键单击并保存图像我没有意识到我实际上是在尝试保存图像,它认为我正在尝试将其保存为名为“Driver”的非类型文件,该文件是脚本页面的名称。
我不知道这里有什么问题,标题位置肯定会带我到图像并且在重定向后没有“Driver”文件的记录?
同样的事情也发生在redirect()
上。
提前感谢您的帮助!
编辑:通过在标头命令后放置die()
来解决此问题。
答案 0 :(得分:5)
您使用的文件路径不适用于标头位置。你应该使用网址。
最佳做法是在标头位置使用绝对网址。 PHP文档说:
HTTP / 1.1需要绝对URI作为 论点»位置:包括 方案,主机名和绝对路径, 但有些客户接受相对URI。 (Source)
之后也总是退出脚本,因为根据我的经验,在某些情况下,重定向后可能仍会执行代码。所以一个很好的例子看起来像这样:
header("location:http://www.mysite.com/path/to/myfile.php");
exit;
在这种情况下,您通常会使用服务器变量:
$url = $_SERVER["HTTP_HOST"]."/path/to/myfile.php";
header("location:".$url);
exit;
干杯!
答案 1 :(得分:1)
header('Location:'。$ filePath);
SITE_ROOT是服务器上htdocs目录的位置;但标题位置应该是文件 relative 到htdocs目录的路径