1

我有一个 php 脚本,它呈现图像(使用 imagick)并将其保存到某个目录"SITE_ROOT.$filePath",然后执行一个header('Location: ' . SITE_ROOT.$filePath),它重定向到的文件是 png 图像。

如果我直接转到路径,就像在 URL 栏中输入它一样,我可以保存图像并且一切正常,但是当我依靠脚本重定向我并尝试右键单击并保存图像时它不会认识到我实际上正在尝试保存图像,它认为我正在尝试将其保存为名为“驱动程序”的非类型文件,这是脚本页面的名称。

我不知道这里出了什么问题,当然标题位置应该只是将我带到图像并且在重定向后没有“驱动程序”文件的记录?

顺便说一句,同样的事情redirect()也会发生。

提前感谢您的帮助!

编辑:这个问题是通过die()在标题命令之后放置一个来解决的。

4

2 回答 2

5

您正在使用不适用于标头位置的文件路径。你应该使用网址。

最佳做法是在标头位置使用绝对 url。PHP 文档说:

HTTP/1.1 需要绝对 URI 作为 » Location 的参数:包括方案、主机名和绝对路径,但有些客户端接受相对 URI。(来源

之后也总是退出脚本,否则根据我的经验,在某些情况下,重定向之后的代码可能仍会被执行。所以一个很好的例子应该是这样的:

header("location:http://www.mysite.com/path/to/myfile.php");
exit;

在这种情况下,您通常会使用服务器变量:

$url = $_SERVER["HTTP_HOST"]."/path/to/myfile.php";
header("location:".$url);
exit;

干杯!

于 2010-08-19T09:01:09.957 回答
1

header('位置:' . $filePath);

SITE_ROOT 是服务器上 htdocs 目录的位置;但标头位置应该是对于 htdocs 目录的文件路径

于 2010-08-19T08:09:49.217 回答