2017-07-15 26 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"; 

}