1. mpyw

    Posted

    mpyw
Changes in title
+PHPで一時的なファイルポインタを扱う方法
Changes in tags
+PHP
cURL
Changes in body
Source | HTML | Preview
@@ -0,0 +1,31 @@
+## 選択肢
+
+### `$fp = fopen('php://memory', 'r+b');`
+
+- メモリ上に領域を確保する。メモリリークに注意。
+
+### `$fp = fopen('php://temp', 'r+b');`
+
+- メモリ上に領域を確保し、aa2MBを超えたら自動削除される一時ファイルを扱う。
+
+### `$fp = fopen("php://temp/maxmemory:{$n}", 'r+b');`
+
+- メモリ上に領域を確保し、`$n` バイトを超えたら自動削除される一時ファイルを扱う。
+
+### `$fp = tmpfile();`
+
+- 自動削除される一時ファイルを作る。
+「ファイル」に対してしか操作できない関数を扱う場合はこれが優秀。
+- **`stream_get_meta_data($fp)`** で返される配列の **`'uri'`** 要素からファイル名を取得することが出来る。
+
+[tempnam()関数](http://php.net/manual/ja/function.tempnam.php)もあるけど、自分でファイルを削除する必要があったりして使いにくい、というか少し用途が違う気がするので割愛。
+
+## 使用例
+
+```php:cURLのCookieとして使う
+<?php
+$ch = curl_init();
+$meta = stream_get_meta_data(tmpfile());
+curl_setopt($ch, CURLOPT_COOKIEJAR, $meta['uri']);
+curl_setopt($ch, CURLOPT_COOKIEFILE, $meta['uri']);
+```