我正在使用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,错误的位置和内容类型标题:
浏览器不显示此图像标记在页面上的图像。但是,当图像URL直接输入地址栏时,会显示图像。
为什么我的服务器在将图像加载到标记时会生成302,但是当图像URL直接输入到地址栏时生成200?我在Windows上运行Apache。
答案 0 :(得分:0)
所描述的行为完全无法实现 - 因为服务器不知道有关如何在网页中嵌入网址。
提供PHP脚本实际调用的更多详细信息:将环境详细信息 - $ _GET,$ _POST和$ _SERVER - 打印到日志文件中。
对register a tick-function可能有帮助,并将每个执行的语句跟踪到日志文件。
检查您的PHP资源。
答案 1 :(得分:0)
事实证明,这是由一个奇怪的并发问题引起的。当浏览器请求图像时,我的框架仍在处理第一个请求(生成包含img元素的页面)。
换句话说,当浏览器请求图像时,它仍然从第一个请求到脚本接收输出。这让事情变得古怪。
输出缓冲没有解决问题,但可能的解决方案是: