为什么图像请求生成302?

时间:2011-09-20 14:44:57

标签: php redirect

我正在使用PHP生成以下图像元素:

<img id="uploaded-image" src="http://localhost/gonzo/plans/image/123/tablemap.png" />

此图像URL通过我的PHP MVC框架路由到以下函数,该函数从我的数据库中获取图像并打印出来:

    public function image($hexCode='',$fileName) {

    if (!$this->validRequest('get')) return false;

    Framework::loadModel('plan_model.php');
    $plan = new PlanModel();

            // Return image data from Blob field in db.
    $image = $plan->getImage('123');

    if ($image) {
        header("Content-Type: image/png");
        print $image;
        die;
    } else {
        echo 'error';
    }
}

请求生成302,错误的位置和内容类型标题:

enter image description here

浏览器不显示此图像标记在页面上的图像。但是,当图像URL直接输入地址栏时,会显示图像。

为什么我的服务器在将图像加载到标记时会生成302,但是当图像URL直接输入到地址栏时生成200?我在Windows上运行Apache。

2 个答案:

答案 0 :(得分:0)

所描述的行为完全无法实现 - 因为服务器不知道有关如何在网页中嵌入网址

提供PHP脚本实际调用的更多详细信息:将环境详细信息 - $ _GET,$ _POST和$ _SERVER - 打印到日志文件中。

register a tick-function可能有帮助,并将每个执行的语句跟踪到日志文件。

检查您的PHP资源。

答案 1 :(得分:0)

事实证明,这是由一个奇怪的并发问题引起的。当浏览器请求图像时,我的框架仍在处理第一个请求(生成包含img元素的页面)。

换句话说,当浏览器请求图像时,它仍然从第一个请求到脚本接收输出。这让事情变得古怪。

输出缓冲没有解决问题,但可能的解决方案是:

  1. 暂停执行第二个(图像请求)脚本足够的时间让第一个完成。
  2. 在单独的子域中托管图片服务脚本。