2011-05-10 48 views
16

我遇到麻煩閱讀和PHP 5.3.2寫php://temp有問題的讀/寫的PHP://臨時流

我主要有:

file_put_contents('php://temp/test', 'test'); 
var_dump(file_get_contents('php://temp/test')); 

唯一的輸出我得到的是string(0) ""

不應該讓我的'測試'回來嗎?

回答

14

php://temp不是文件路徑,它是一個僞協議,它在使用時總是創建一個新的隨機臨時文件。 /test實際上完全被忽略。 php://temp包裝接受的唯一額外「參數」是/maxmemory:n。你需要保持一個文件句柄周圍打開的臨時流,否則會被丟棄:

$tmp = fopen('php://temp', 'r+'); 
fwrite($tmp, 'test'); 
rewind($tmp); 
fpassthru($tmp); 
fclose($tmp); 

http://php.net/manual/en/wrappers.php.php#refsect1-wrappers.php-examples

+0

感謝 - 大腦短時間閱讀手冊頁更早... – HorusKol 2011-05-10 07:55:27

+0

找到我需要的 - 使用vfsStream – HorusKol 2011-05-10 08:35:45

6

每一次,當您使用的fopen獲得處理程序,PHP的內容://溫度將會被沖洗。使用rewind()和stream_get_contents()來獲取內容。或者,使用正常的緩存,如APC或memcache :)

+0

作爲一個方面說明,你可以'倒帶'隱式'stream_get_contents($ stream,-1,0)'。這將從頭開始讀取整個流。 – quickshiftin 2017-06-14 15:22:25