1. mpyw

    No comment

    mpyw
Changes in body
Source | HTML | Preview
@@ -1,46 +1,46 @@
## 選択肢
### `$fp = fopen('php://memory', 'r+b');`
- メモリ上に領域を確保する。メモリリークに注意。
### `$fp = fopen('php://temp', 'r+b');`
-- メモリ上に領域を確保し、 **2MB** を超えたら自動削除される一時ファイルを扱う
+- メモリ上に領域を確保し、 **2MB** を超えたら自動削除される一時ファイルを作る
### `$fp = fopen("php://temp/maxmemory:{$n}", 'r+b');`
-- メモリ上に領域を確保し、`$n` バイトを超えたら自動削除される一時ファイルを扱う
+- メモリ上に領域を確保し、`$n` バイトを超えたら自動削除される一時ファイルを作る
### `$fp = tmpfile();`
- 自動削除される一時ファイルを作る。
「ファイル」に対してしか操作できない関数を扱う場合はこれが優秀。
- **`stream_get_meta_data($fp)` で返される配列の `'uri'` 要素からファイル名を取得することが出来る** 。
[tempnam()関数](http://php.net/manual/ja/function.tempnam.php)もあるけど、自分でファイルを削除する必要があったりして使いにくい、というか少し用途が違う気がするので割愛。
-#### 一時ファイルが削除されるタイミングは?
+#### メモリが解放される・一時ファイルが削除されるタイミングは?
-- `fclose($fp)` のようにして **ファイルポインタを閉じた**
+- `fclose($fp)` のようにして **ファイルポインタを閉じた** とき
- **スクリプトが終了した** とき。
<ins>※ 変数コンテナのように自動的にガーベジコレクションが行われるわけではない。</ins>
## 使用例
```php:cURLのCookieとして用意する
<?php
$ch = curl_init();
$meta = stream_get_meta_data($fp = tmpfile());
curl_setopt($ch, CURLOPT_COOKIEJAR, $meta['uri']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $meta['uri']);
```
```php:繰り返し上記のコードが呼ばれる可能性が場合は後始末が必要
<?php
fclose($fp);
curl_close($ch);
```