PHP 5.3.2)の_php://temp
_ストリームの読み取りと書き込みに問題があります
私は基本的に持っています:
_file_put_contents('php://temp/test', 'test');
var_dump(file_get_contents('php://temp/test'));
_
私が得る唯一の出力はstring(0) ""
です
「テスト」を取り戻すべきではありませんか?
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 を参照してください。
毎回、fopenを使用してハンドラーを取得すると、php:// tempのコンテンツがフラッシュされます。 rewind()とstream_get_contents()を使用してコンテンツを取得します。または、APCやmemcacheなどの通常のキャッシャーを使用します:)
これが遅いことは知っていますが、@ OZ_の答えに加えて、巻き戻した後、「fread」も機能することを発見しました。
$handle = fopen('php://temp', 'w+');
fwrite($handle, 'I am freaking awesome');
fread($handle); // returns '';
rewind($handle); // resets the position of pointer
fread($handle, fstat($handle)['size']); // I am freaking awesome
最後に、文書化された小さなメモを見つけました。それが理由を説明しています
PHP Manual の例5は、ほぼ同じコードサンプルを使用し、
php:// memoryとphp:// tempは再利用できません。つまり、ストリームが閉じられた後は、それらを再度参照する方法はありません。
_file_put_contents('php://memory', 'PHP'); echo file_get_contents('php://memory'); // prints nothing
_
これは、file_put_contents()
がストリームを内部的に閉じることを意味していると思います。これにより、file_get_contents()
はストリーム内のデータを再度回復できなくなります。