处理较大的字符串时,PHP脚本停止工作
我正在测试一个php脚本来创建包含大量数据的csv文件。 这就是我完成这项任务的方式:处理较大的字符串时,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个
$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行并将其写入文件。查看错误日志。它可能会说一些关于
它应该位于
$csvdata=
部分,您的脚本可能会在该部分发出内存耗尽
错误
当您将10个字符保存到a变量时,它需要10位,并且它会不断变大。限制是当它到达分配的内存或php时
这就是你前进的方式:
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
模式时使用