我有一些非常简单的php代码,从数据库返回二进制图像数据。
ob_start();
$stmt = $db->prepare($sql);
$stmt->execute(array($ImageID));
$stmt->bindColumn(1, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
ob_clean();
header("Content-Type: " . $content_type);
fpassthru($lob);
让我们调用这个脚本get_image.php。我从另一个脚本调用这个脚本来获取图像数据,然后对其进行处理。像这样。
$src = file_get_contents('example.com/get_image.php?ImageID=foo');
$src = imagecreatefromstring($src);
imagecopyresized($newfile, $src, 0, 0, 0, 0, $newwidth, $newheight, $origwidth, $origheight);
我从图像处理函数中得到错误信息,说“数据格式不可识别”。在查看了响应之后,我的$src变量似乎包含了头和二进制数据。我一直在做研究,但是我不知道如何去掉头输出,而只处理原始的二进制字符串。如有任何帮助,我们将不胜感激。
为了清楚起见,如果我打印出$src字符串,而不是原始二进制数据,我将得到以下结果。
HTTP/1.1 200 OK
Date: Thu, 19 Nov 2009 17:33:01 GMT
Server: Apache/2.2.8 (Unix) ...
X-Powered-By: PHP/5.2.11
Connection: close
Content-Type: image/jpeg
/* Then all the binary data */
最佳答案
我不是php专家,这可能是真正的解决方案所在(只获取响应体,没有头),但我知道我的http。为此,上面提到的http请求的头和体总是由两个<CR><LF>
分隔。您应该能够获取响应,并从中获取子字符串。示例idontknowphp代码:
$start = $src.positionOf('<CR><LF><CR><LF>')
$stop = $src.lenght()
$img = $src.sub($start, $stop)