我有一个PHP脚本,我用它来发送图像到移动设备的请求。在当前版本的脚本运行,并在年底前我用imagePNG()输出图像的设备,但这样做在PHP手册的例子一些阅读网上我看到这个例子:PHP - 使用fpassthru发送图像到手机图像PNG
<?php
header("Content-Type: image/png");
# Generate cachefile for image, if it doesn't exist
if(!file_exists($cachefile)) {
$im = generateimage(); # some code generates an image resource
imagepng($im, $cachefile); # store the image to cachefile
# don't output it like this:
/* imagepng($im);*/
imagedestroy($im);
}
$fp = fopen($cachefile, 'rb'); # stream the image directly from the cachefile
fpassthru($fp);
exit;
?>
我用这个例子有一些修改,发送我的图片到手机,它工作正常,但我有一些问题,我想问: 1)这是比从文件中创建一个图像和使用imagePNG发送更有效吗?
2)也不应该使用fpassthru后立即关闭文件?
3)如果我确实使用fopen,这是否意味着该文件被锁定,意味着没有其他设备,但那个人将能够访问它的那一刻,它的流媒体?
对此事的任何意见将不胜感激。
非常酷:)感谢您确认我对使用fclose的想法我只是没有把握,我无法找到关于此事的任何文档。因此,如果我在服务器上有文件,使用readfile会为我节省一个必须用fopen打开文件的步骤?那么只要使用readfile,它甚至可能更有效率?我没有尝试过,所以我不知道,但会读文件流图像到移动设备。 – 2012-07-23 05:41:51
关于释放资源[这里]有一些小提及(http://php.net/manual/en/language.types.resource.php)。我记得一些更具体的事情,但可能与相同规则适用的mysql连接有关。 Readfile与'fpassthru'完全相同,只是readfile不需要文件句柄(保存你的步骤),PHP会在内部打开它并按照'fpassthru'的方式将数据写入输出缓冲区。如前所述,在内部,它们都调用相同的函数,因此它们的表现完全相同。 – drew010 2012-07-23 15:38:58
再次感谢:) – 2012-07-23 17:46:20