Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database_String - Fatal编程技术网

在php中将大字符串写入文件

在php中将大字符串写入文件,php,database,string,Php,Database,String,我正在从数据库中构建一个大字符串,有时它以MB为单位。是否有一种方法可以在字符串大小超过某些限制(字节)后将其写入文件。我关心的是尽快释放内存。另一方面,由于磁盘延迟等原因,打开文件资源并在一定时间间隔后写入的想法似乎没有用 a) 那么,如何管理大字符串连接并将其保存到文件中呢 b) 是否有任何SPL类来管理此类活动以提高性能,或者我们是深受宠爱的(.)点操作员的怜悯?只需将每一行写入磁盘即可。这将最大限度地减少在任何给定时间使用的RAM数量,并且磁盘延迟应该大致相同。 由于您从数据库中获取的

我正在从数据库中构建一个大字符串,有时它以MB为单位。是否有一种方法可以在字符串大小超过某些限制(字节)后将其写入文件。我关心的是尽快释放内存。另一方面,由于磁盘延迟等原因,打开文件资源并在一定时间间隔后写入的想法似乎没有用

a) 那么,如何管理大字符串连接并将其保存到文件中呢


b) 是否有任何SPL类来管理此类活动以提高性能,或者我们是深受宠爱的(.)点操作员的怜悯?

只需将每一行写入磁盘即可。这将最大限度地减少在任何给定时间使用的RAM数量,并且磁盘延迟应该大致相同。


由于您从数据库中获取的数据是一个巨大的字符串,因此可能没有其他方法可以实现这一点。您可以按顺序将数据写入文件,但如果源数据100%立即显示,则似乎没有意义。字符串没有逐渐连接,即
每行
那么为什么不使用良好的旧数据进行顺序写入?工作的好坏取决于你的数据库和你到底在做什么。如果它支持,您可以打开数据库中BLOB对象的流句柄,并将其直接流到文件中。数据根本不会存储在内存中,它只是直接通过PHP流动。Postgres+PDO+BLOB类型支持此功能,我不确定其他数据库是否支持此功能。@deceze不幸的是,我使用的是Mysql。本来可以在Postgres SQL/PL中完成加快速度的事情
$fp = fopen('filename.txt', 'w');

while($row = // query stuff) {
    fwrite($fp, $row['column']);
}
fclose($fp);