PHP - 使用 fpassthru 通过 imagePNG 将图像发送到移动设备

标签 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,这是否意味着该文件已被锁定,意味着没有其他设备可以在流式传输的那一刻访问它?

如有任何意见,我们将不胜感激。

最佳答案

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

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

至于你的第三个问题,因为你没有调用flock ,文件未锁定。如果一个进程打开它进行读取,则另一个进程可以同时打开它进行读取。

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

关于PHP - 使用 fpassthru 通过 imagePNG 将图像发送到移动设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604202/

相关文章:

javascript - QPython3 在 HTML GUI 中使用 Javascript 的问题

Android HTTP GET 不起作用

android - 以编程方式检索用户代理

iphone - 连线没有代码的计算器按钮,将其删除,现在模拟器崩溃

php - 有什么东西不见了吗?在不刷新\重新加载页面的情况下更改\更新页面内容

php - Jquery Ajax Post 无法在所有浏览器中随机返回

php - 为什么 mysqli_query 被评估为 bool 值而不是结果集

php - 仅在 WooCommerce 前端将小数风格化为大写

iphone - 如何在没有私有(private)库的iPhone中获取bssid?

iphone - UIWebView loadHTMLString 在 iOS5 中不起作用