我有一些非常简单的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)

07-26 09:30
查看更多