如何修复致命错误:php内存不足(已分配)(试图分配字节)

如何修复致命错误:php内存不足(已分配)(试图分配字节),php,Php,我将csv文件的值读取为: //$mypath . '/' . $filename <=> ../abc.csv $val = file_get_contents($mypath . '/' . $filename); $escaped = pg_escape_bytea($val); $model->addFileImport($tmp, $data['email'], $escaped

我将csv文件的值读取为:

 //$mypath . '/' . $filename <=> ../abc.csv
 $val = file_get_contents($mypath . '/' . $filename);                                       

 $escaped = pg_escape_bytea($val);

 $model->addFileImport($tmp, $data['email'], $escaped);
但它显示出错误:

致命错误:第112行的C:\wamp\www\joomlandk\components\com\u servicemanager\views\i0701\view.html.php中内存不足(已分配230686720)(试图分配657099991字节)

在行
$escape=pg_escape_bytea($val)

为什么??如何修复该错误?

尝试添加:

ini_set('memory_limit', '700M');

pg_escape_bytea()为bytea数据类型转义字符串。它回来了 转义字符串

选择bytea类型时,PostgreSQL将返回八进制字节值 前缀为“\”(例如\032)。用户应该转换回 手动设置二进制格式

这意味着一个输入字节给出4个字节,即初始大小的4倍

您需要大量的RAM来处理文件(可能您的系统无法分配那么多内存,即使没有PHP限制)。一个解决方案是从40MB的块中处理它,例如使用和函数

  $val = file_get_contents($mypath . '/' . $filename);
将需要100MB—因此下一行需要400MB,总计500MB。您需要从*file_get_contents*读取更少的内容,就像一次只读取20(或40)MB

  • 使用fread读取20MB的文件(而不是文件内容)
  • 使用*pg_escape_bytea*(总计100MB)处理20MB
  • 重复此过程,直到文件完全处理完毕

it show error:Fatal error:C:\wamp\www\joomlandk\components\com\u servicemanager\views\i0701\view.html.php中允许的内存大小为734003200字节(尝试分配657099991字节),第114行:$val=file\u get\u contents($mypath./'$filename);但它在第行显示错误:$escape=pg_escape_bytea($val);我必须将字符串转换为bytea插入数据库。是的,因为第一行文件内容需要100MB,那么pg\u escape\u bytea行需要4次,即400MB。总计500MB。。。这就是为什么会出现错误-如果您可以只归档(比如)25MB的内容,那么总数将只有125MB。看到编辑了吗?我可以为Web服务器设置memeory吗?@妈妈请参考您的内存不足,据我所知,物理内存不足。657099991字节为626.659兆字节。你最好的办法就是去。
  $val = file_get_contents($mypath . '/' . $filename);