Curlでファイルポインタを2回閉じなければならない!?@動画サイトへの道
前記のCurlでcgiモードでfopen後fcloseしないままだとfopen状態が維持される?のエントリを書きましたが、その続報です。
Curlを利用してファイルポインタから直接ローカルで書き込みを行うと2回fcloseをしなければならないかもしれないです。
fopen後、Curlを使ってマルチスレッドでファイルを取得した後、fcloseを2回実行すると正常にファイルストリームが開放されました。
…なんでだろう?バグの類かなー
具体的には(一部抜粋)
var_dump($fp); var_dump(fclose($fp)); var_dump($fp); var_dump(fclose($fp)); var_dump($fp);
としたところ、
resource(33) of type (stream) bool(true) resource(33) of type (stream) NULL bool(true) resource(33) of type (Unknown)
との結果。
なぜか出力バッファに"NULL"文字列が格納されるような動き。
また、fcloseの返り値はいずれもtrueが帰ってくる。
ううむ、2回fcloseで開放ってあり得るのかな…
単純にタイミング的な話で、2回目以降にストリームが開放されているだけのような気もする。
ただ、間にwaitを挟んでも結果は同じだったので、やっぱり2回というのが鍵なんだろうか…