2017-07-15 28 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);'作爲代碼的前兩行,查看是否有任何報告。 –

回答

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

謝謝,奈傑爾,我移動fopen出循環但仍然相同的結果 – 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"; 

}