2017-07-15 10 views
0

私はfopen、fwrite、およびfcloseを使ってファイルを書き換えています。私が50MBの大きなファイルを書き直すと、ファイルは正常に書き換えられますが、fcloseの後のSQL文は実行されず、最後にエコーも実行されません。 SQLは20MBのファイルに対して実行しますfopen fwrite大きなファイルの後にSQLが実行されない

アイデアはありますか?問題が発生します

set_time_limit(10000); 

if (!file_exists($filename)) { 
echo "file missing"; 
} 
else{ 
$fr = fopen($filename, "r"); 
$file = ""; 
$file = fgets($fr, 4096); 
while(!feof($fr)){ 

//read from file 

    $file =str_replace("\r","",$file); 
    $file =str_replace("\n","",$file); 
    $file =str_replace("~","",$file); 

//write to file 
    $fw = fopen($tempfile, "a") or die("Couldn't create new file"); 
    fwrite($fw, $file); 
    $file = fgets($fr, 4096); 
    } 
fclose($fw); 
fclose($fr); 

//set status to 5 
$update_stmt = $mysqli->prepare("Update bs_uploads set UploadStatus=5 where 
UploadNewFilename=?"); 
$update_stmt->bind_param("s", $original_filename); 
$update_stmt->execute(); 

echo "finished"; 

} 
+0

大きなファイルを実行するのに10秒以上かかることはありませんか?あなたは 'set_time_limit(10000);を持っていますそれを増やしてみましたか? –

+0

制限時間は10000秒ですが、ファイルはどのサイズであっても完全に書き換えられますが、それ以降のSQLでは – JoeyA

+0

が返されます。 'error_reporting(E_ALL);を追加してください。 ini_set( 'display_errors'、1); 'あなたのコードの上位2行として、何かが報告されているかどうかを確認してください。 –

答えて

0

一つのことは、あなたは、あなたが読んで、ファイルのすべてのチャンクのための出力ファイルを開くことです...

$fr = fopen($filename, "r"); 
$fw = fopen($tempfile, "w") or die("Couldn't create new file"); 

$file = ""; 
$file = fgets($fr, 4096); 
while(!feof($fr)){ 

//read from file 

    $file =str_replace("\r","",$file); 
    $file =str_replace("\n","",$file); 
    $file =str_replace("~","",$file); 

//write to file 
    //$fw = fopen($tempfile, "a") or die("Couldn't create new file"); 
    fwrite($fw, $file); 
    $file = fgets($fr, 4096); 
    } 
fclose($fw); 
fclose($fr); 

ない、それはあなたがたが、オープンに問題が発生した場合に確認してくださいファイルが読み込まれると問題が発生します。

+0

ありがとう、ナイジェル、私はループから外に出ますが、同じ結果 – JoeyA

0

スクリプトを長時間実行すると、mysqli接続が緩んでいるようです。 私は、ページの上部にある私の接続ステートメントをSQLの更新ステートメントの上に移動することでこれを解決しました。

fclose($fw); 
fclose($fr); 

include("connect_mysqli.inc.php"); 

//set status to 5 
$update_stmt = $mysqli->prepare("Update bs_uploads set UploadStatus=5 where 
UploadNewFilename=?"); 
$update_stmt->bind_param("s", $original_filename); 
$update_stmt->execute(); 

echo "finished"; 

} 
関連する問題