我有一個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