Php 为什么图像请求生成302?

Php 为什么图像请求生成302?,php,redirect,Php,Redirect,我正在使用PHP生成以下图像元素: <img id="uploaded-image" src="http://localhost/gonzo/plans/image/123/tablemap.png" /> 请求生成一个302,其中包含错误的位置和内容类型标题: 浏览器不显示此图像标记在页面上的图像。但是,当直接在地址栏中键入图像URL时,将显示图像 为什么我的服务器在将图像加载到标记时会生成302,而在将图像URL直接键入地址栏时会生成200?我正在Windows上运行Apac

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

<img id="uploaded-image" src="http://localhost/gonzo/plans/image/123/tablemap.png" />
请求生成一个302,其中包含错误的位置和内容类型标题:

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


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

所描述的行为根本不可能发生,因为服务器不知道URL是如何嵌入到网页中的

提供PHP脚本实际调用的更多详细信息:将环境详细信息-$\u GET、$\u POST和$\u SERVER打印到日志文件中

将每个执行的语句记录并跟踪到日志文件可能会有所帮助


检查您的PHP源代码。

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

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

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

  • 暂停执行第二个(图像请求)脚本足够长的时间,以完成第一个脚本
  • 将映像服务脚本托管在单独的子域上

  • 我将验证您的函数是否真的被调用,您是否有一个映像,并且在此之前没有发送任何其他头文件。也许您的MVC框架生成了302?是否发生了mod_重写操作?是的,我确实启用了mod_重写。当在地址栏中键入时,您如何检查图像URL是否发回了200?(而不是生成一个302,然后重定向到一个200页。)你说“打字”——你确实试过直接复制粘贴而不是打字吗?你能从命令行中尝试类似wget的东西并观察它是否显示重定向吗?当图像的URL粘贴到地址栏时,Firebug会显示一个200代码,带有正确的内容类型标题-但我会先检查302是否发生。这正是我如此困惑的原因!当然但是,不要只检查浏览器中发生了什么,还要验证脚本中到底发生了什么。
        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';
        }
    }