ファイルのアップロード(zipファイルの中にcsvファイルが入っています)で、$_FILEの情報(拡張子のエラーチェックなど)を行った後に
バックグラウンドでzip関数にてcsvファイルを読み込みたいと思っています。
zip関数を使ってファイルの読み込み自体は、以前こちらで教えていただきバックグラウンドで動かさなければ読み込めます。
今回csvのファイル数・ファイルの行が多すぎるためタイムアウトするので、バックグラウンドで動かしたいと思っています。
まず、$_FILE情報のチェックプログラムは以下のように書いています。(index.php)
if( isset($_POST["submit_file"]) ){ $filename = $_FILES['fileupload']['name']; $filesize = $_FILES['fileupload']['size']; $tmp_name = $_FILES['fileupload']['tmp_name']; $ext = substr($filename, strrpos($filename, '.') + 1); if( $filename=="" || $ext!="zip" ) $error[] = "zipファイルを選択して下さい。"; if( empty($error) ) exec("nohup php -c '' 'bg.php' '$filename' '$tmp_name' > /dev/null &"); }
execでbg.php(バックグラウンド)へ移動しzip関数でcsvファイルを読み込む処理を書いています。(bg.php)
//countでループして、100になったら「.」を表示するなどしています。 set_time_limit(0); ob_implicit_flush(); $filename = $argv[1]; $tmp_name = $argv[2]; //zipファイルをオープン $zip = zip_open($tmp_name); if( $zip ){ while( $entry = zip_read($zip) ) { $csv_file = basename(zip_entry_name($entry)); /*このwhileの中に入っていません。*/ } }
zip_readで読み込めておらず、whileの中の処理ができていない状況です。
logなどに書き込み、$argvの値は入っていることを確認しています。
bg.phpの中身をindex.phpに書き込めばもちろん動きます。
憶測ですが、index.phpで$tmp_nameで取得したパスがbg.phpでは違うため読み込めてないのか、と思います。
【質問】
zip関数でcsvファイルを保存せず読み込みではなく、index.phpでcsvファイルをどこかに保存し、bg.phpで保存したcsvファイルを読み込まないとだめでしょうか。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/04 02:27