PHP - 使用fpassthru通过imagePNG将图像发送到mobille

时间:2012-07-22 21:44:16

标签: php android iphone image

我有一个php脚本,我可以根据请求将图像发送到移动设备。在当前版本中脚本运行,在结束之前我使用imagePNG()将图像输出到设备,但是在php手册中的示例中做了一些阅读,我看到了这个例子:

<?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那是否意味着该文件被锁定意味着没有其他设备,但是那个人能够访问它的那一刻它被流式传输?

对此事的任何意见都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为如果你有一个繁忙的网站,缓存生成的图像是个好主意。它肯定会节省内存和CPU周期,以换取一些硬盘空间。

关于在使用fpassthru后关闭文件,没有必要,因为PHP会在脚本终止时关闭文件。由于下一行调用exit,因此无需显式关闭该文件。如果输出图像后还有更多内容,我建议在不再使用时关闭文件。

关于您的第三个问题,由于您尚未调用flock,因此该文件未被锁定。如果一个进程打开它进行读取,另一个进程可以打开它以便同时读取。

最后一点,您可以使用函数readfile输出文件。这样您就不必调用fopen,但在内部,readfilefpassthru调用相同的PHP函数php_stream_passthru,因此基于哪个时间或效率几乎没有差异你使用的一个。