出现这个错误消息,有什么建议吗?

允许内存大小为33554432字节已耗尽(已尝试分配 43148176字节)的PHP


当前回答

做的事情:

ini_set('memory_limit', '-1');

从来都不是好事。如果你想读取一个很大的文件,最好的做法是一点一点地复制它。尝试以下代码进行最佳实践。

$path = 'path_to_file_.txt';

$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );

while (!feof($file)) {
    $output .= fread( $file, $len );
}

fclose($file);

echo 'Output is: ' . $output;

其他回答

如果您的脚本需要分配这么大的内存,那么您可以通过在php文件中添加这一行来增加内存限制

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

其中,4400万是你预计消费的数量。

但是,大多数情况下,此错误消息意味着脚本正在做错误的事情,增加内存限制只会导致相同的错误消息,但数字不同。

因此,您必须重写代码,而不是增加内存限制,这样它就不会分配那么多内存。例如,在较小的块中处理大量数据,取消保存大值但不再需要的变量,等等。

ini_set('memory_limit', '-1');

我在php7.2和laravel 5.6中遇到了同样的问题。我只是增加变量memory_limit = 128M在php.ini的数量作为我的应用程序的需求。可能是256M/512M/1048M.....现在它工作得很好。

你可以通过执行下面的代码来增加php脚本的内存:

ini_set('memory_limit','-1'); // enabled the full memory available.

并且在脚本中取消分配不需要的变量。

如果你正在使用Laravel,那么可以使用以下方法:

public function getClientsListApi(Request $request){
      print_r($request->all()); //for all request
      print_r($request->name); //for all name 
}

而不是

public function getClientsListApi(Request $request){
      print_r($request); // it show error as above mention
}