Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理较大的字符串时,PHP脚本停止工作_Php_String_File_File Io_Large Data - Fatal编程技术网

处理较大的字符串时,PHP脚本停止工作

处理较大的字符串时,PHP脚本停止工作,php,string,file,file-io,large-data,Php,String,File,File Io,Large Data,我正在测试一个php脚本来创建包含大量数据的csv文件。 这就是我完成这项任务的方式: $csvdata = "ID,FN,LN,ADDR,TEL,PRO\n 1,fn1,ln1,addr1,tel1,pro1\n...etc,"; $fname = "./temp/filename.csv"; $fp = fopen($fname,'w'); fwrite($fp,$csvdata); fclose($fp); 我注意到,当字符串($csvdata)包含100000个

我正在测试一个php脚本来创建包含大量数据的csv文件。 这就是我完成这项任务的方式:

$csvdata = "ID,FN,LN,ADDR,TEL,PRO\n
            1,fn1,ln1,addr1,tel1,pro1\n...etc,";
$fname = "./temp/filename.csv";
$fp = fopen($fname,'w');
fwrite($fp,$csvdata);
fclose($fp);
我注意到,当字符串($csvdata)包含100000个数据行时,脚本工作正常。但是,当它得到更多的00000个数据行时,它会停在我构建字符串$CSVDATA的中间(我通过连接for循环中的数据、从数据库中的数据来构建$CSVDATA字符串)。 有人能告诉我使用大字符串值时出现了什么问题吗

多谢各位 问候

我通过在for循环中连接数据来构建$csvdata字符串,数据来自数据库

由此我推断,您正在准备将整个文件作为字符串写入,并最终将其写入文件


如果是这样的话,那么这种方法是不好的。请记住,字符串存在于主内存中,每次追加时,都会消耗更多内存。解决方法是逐行写入从数据库读取记录的文件,如果需要,进行转换/格式化,准备CSV行并将其写入文件。

查看错误日志。它可能会说一些关于

  • 您正在尝试分配超过某个最大值的内存。这意味着您使用的内存太多->您可以更改php允许使用的内存量(php.ini中的内存限制)

  • 执行时间比允许的时间长。同样,您可以增加这一次


  • 它应该位于
    $csvdata=
    部分,您的脚本可能会在该部分发出
    内存耗尽
    错误

    当您将10个字符保存到a变量时,它需要10位,并且它会不断变大。限制是当它到达分配的内存或php时

    这就是你前进的方式:

  • 设置内存限制-增加PHP内存限制
  • `ini设置(“内存限制”、“256M”)

    2.逐行写

    立即将每条数据写入文件,而不是将它们堆积起来。此外,如果您将数组[0]写入文件,然后将下一段数据存储到数组[1],然后再次写入并继续此操作,则效果与您现在所做的相同

    所以

    while(blah blah){
    $var = "text";
    fwrite($file,$var);
    
    或者在for循环中

    for($i=0;blahblah){
    $var[$i] = "query";
    fwrite($file,$var[$i]);
    unset($var);
    
    当数据库查询是带有
    WHERE id='$i'


    祝你好运。

    像“挂起”一样“停止”?还是“崩溃”?还是“出错”?多谢你这个瘾君子!我将尝试那种方法。:)我同意这个解决办法。还取决于为每行写入数据的实现,将确保u r不会丢失数据。。。在另一种情况下,如果您正在等待生成完整的字符串,则可能会丢失数据…@YasiruGaminda您可以在启用
    文件\u APPEND
    模式时使用