0

在我的一个应用程序中,用户可以上传 CSV 文件(| 分隔字段),上传后我将文件的所有内容存储在临时表中(我每次都截断此表以进行新上传,以便它包含当前文件数据)。之后,我将遍历该表的每一行,并根据业务逻辑执行一些数据库操作。

下面的代码将说明这一点:

if(isset($_POST['btn_uploadcsv']))    
{         
$filename = $_FILES["csvupload"]["name"];
$uploads_dir = 'csvs'; //csv files...
$tmp_name = $_FILES["csvupload"]["tmp_name"];
$name =  time();
move_uploaded_file($tmp_name, "$uploads_dir/$name");

$csvpath = "$uploads_dir/$name";

$row = 0;
$emptysql = "TRUNCATE TABLE `temp`";
$connector->query($emptysql);

if (($handle = fopen($csvpath, "r")) !== FALSE) {
    $str_ins = "";
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) {
                    /*
                     *     Here I am getting the column values to be store in the 
                     *     the table, using INSERT command
                     */
                    unset($data);
    }
            fclose($handle);
}

    /*Here I am selecting above stored data using SELECT statement */

for($j=0;$j<count($allrecords);$j++)
{
        echo "In the loop"; 
         /*If I use echo statement for debugging it is working fine*/

        //set_time_limit(300);  
        /* I have tried this also but it is not working*/

        if(!empty($allrecords[$j]['catid']))
        {
         // Here is my business logic which mailny deals with 
         // conditional DB operation    
        }

        echo "Iteration done."; 
        /*If I use echo statement for debugging it is working fine*/                          
}
}

问题是当我在服务器上执行 aboe 脚本时,它给出了服务器超时错误。但是当我在我的本地主机上测试上面的脚本时,它工作正常。

同样如代码中所述,如果我使用echo语句进行调试,那么它工作正常,当我删除它时,它开始出现连接超时问题。

我已经尝试过set_time_limit(300), set_time_limit(0),但它们似乎都不起作用。

任何想法,我该如何解决上述问题。

-- 非常感谢您的宝贵时间。

编辑:

我已经检查过了,文件正在上传到服务器上。

4

2 回答 2

0
set_time_limit

改成

ini_set("max_execution_time",300);

当 php.ini 中未设置 max_execution_time 时,set_time_limit 有效。

于 2013-07-23T08:02:39.857 回答
0

我已经使用flush解决了这个问题,将中间输出发送到浏览器,同时查询在后台执行。

这就是我修改代码的方式:

for($j=0;$j<count($allrecords);$j++)
{

  /*At the end of each iteration, I have added the following code*/   
   echo " ";
   flush();                   
}

感谢此链接上的贡献者PHP:在等待数据库查询执行时可能向浏览器涓流输出吗?,我从那里得到灵感。

于 2013-07-23T09:26:00.087 回答