日記
ピュアPHPなアップロードステータスバー挫折Edit

PHPでは、ファイルアップロード(サーバーでの受信処理)が完了するまで、サーバー上のどのファイルがどのリクエストに対してアップロードされているファイルなのかを、PHPコードから知る方法がない(アップロード用テンポラリファイル名はPHP言語が自動的に生成する)ため、アップロード経過をAjaxで知らせるような実装は、PHP単体ではできない。PHPで実装されたその手のデモも、よく見るとファイル受信処理自体はPHP以外の言語を使っているはず。

という壁を破るいい方法を思いついた。アップロードフォームを生成する時点で、リクエスト固有のテンポラリディレクトリを作成して、upload_tmp_dirとしてセットしておき、セッションを使ってその情報を引き継ぐようにすれば、そのディレクトリ内に生成されたファイル=アップロードされているファイルになるじゃないか。

と思ったんだけど、upload_tmp_dirってPHPコードからは上書きできないのね。っつーか、実行順序としては、ファイルアップロードの受信処理が終わった(=upload_tmp_dir設定が使われた)後に、PHPで書かれたコードが実行されるんだもんな。くっそー、こうなったら.htaccessとmod_envとphp_valueを組み合わせて、強引にセッション固有のupload_tmp_dirを作成したりすれば、何とかなるかなー。って、それはもう全然PHPネイティブな方法じゃないよ。

Published At2006-03-28 00:00Updated At2006-03-28 00:00