致命错误:第1012行的/home/apartmen/php/HTTP/Request.php中允许的419430400字节内存已耗尽(尝试分配251268854字节)

致命错误:第1012行的/home/apartmen/php/HTTP/Request.php中允许的419430400字节内存已耗尽(尝试分配251268854字节),php,memory,amazon-s3,Php,Memory,Amazon S3,好的,我知道这个问题是怎么被问到的。但是,事情是这样的 我已经在使用ini_set'memory_limit'、'400M'; 我试图传输到AmazonS3的文件是245MB 错误消息很奇怪,当它试图分配239MB时,400 MB的允许内存耗尽了。。那不是反过来吗? 我使用的脚本是一个库,用于与AmazonS3通信 救命啊 编辑 好的,这是代码,正如你所看到的,我没有做太多,这都是关于我使用的脚本。。这就是: 在尝试分配239MB时,已耗尽400MB的允许内存。。这意味着PHP试图分配额外的23

好的,我知道这个问题是怎么被问到的。但是,事情是这样的

我已经在使用ini_set'memory_limit'、'400M'; 我试图传输到AmazonS3的文件是245MB 错误消息很奇怪,当它试图分配239MB时,400 MB的允许内存耗尽了。。那不是反过来吗? 我使用的脚本是一个库,用于与AmazonS3通信

救命啊

编辑 好的,这是代码,正如你所看到的,我没有做太多,这都是关于我使用的脚本。。这就是:


在尝试分配239MB时,已耗尽400MB的允许内存。。这意味着PHP试图分配额外的239MB内存,当添加到已分配给脚本的内存时,该内存超过了400MB的限制。

允许在尝试分配239MB时耗尽400MB的内存。。这意味着PHP试图分配额外的239MB内存,当添加到已分配给脚本的内存中时,该内存超过了400MB的限制。

AWS PHP SDK有一个AmazonS3类,可以将本地文件流式传输到S3


您需要注意的参数是fileUpload。

AWS PHP SDK有一个AmazonS3类,可以将本地文件流式传输到S3


您需要注意的参数是fileUpload。

您需要显示脚本。您是在循环中传输一个文件还是多个文件?显示代码。您不需要使用400+mb来传输245 mb的文件。。。您不需要读取内存中的文件,只需将流复制到流即可。。。因此,向您展示代码,以便我们可以尝试帮助您找出失败的原因…这是备份类和s3类中的一个设计缺陷。。与其使用流来传递数据,这样您就可以简单地这样做,根本不需要将文件读入内存,而是将所有数据作为字符串传递。因此,在不进行重大重构的情况下使用这些类,您将无法使用大量内存…一个快速修复方法可能是在调用$s3->putObject$name、$data、NULL、NULL、NULL、$metadata之后插入未设置的$data;在备份脚本中。这将告诉GC释放内存,并最终降低while循环期间的内存消耗。请参阅,您需要显示脚本。您是在循环中传输一个文件还是多个文件?显示您的代码。您不需要使用400+mb来传输245 mb的文件。。。您不需要读取内存中的文件,只需将流复制到流即可。。。因此,向您展示代码,以便我们可以尝试帮助您找出失败的原因…这是备份类和s3类中的一个设计缺陷。。与其使用流来传递数据,这样您就可以简单地这样做,根本不需要将文件读入内存,而是将所有数据作为字符串传递。因此,在不进行重大重构的情况下使用这些类,您将无法使用大量内存…一个快速修复方法可能是在调用$s3->putObject$name、$data、NULL、NULL、NULL、$metadata之后插入未设置的$data;在备份脚本中。这将告诉GC释放内存,并最终降低while循环期间的内存消耗。看到没问题,现在我做了700M,但出现了内部服务器错误。。刚刚检查过,没有,我没有使服务器崩溃:P文件只有245M,为什么它需要那么多内存?我猜它需要那么多内存,因为它将整个文件加载到内存中,而不是在chuncks中读取,或者如果是XML,则使用完整的解析器file@Tor:如果出现内部服务器错误,您可能想检查日志,看看为什么…好吧,现在我将其设置为700M,但出现了内部服务器错误。。刚刚检查过,没有,我没有使服务器崩溃:P文件只有245M,为什么它需要那么多内存?我猜它需要那么多内存,因为它将整个文件加载到内存中,而不是在chuncks中读取,或者如果是XML,则使用完整的解析器file@Tor:如果出现内部服务器错误,您可能需要检查日志以了解原因。。。
ini_set('memory_limit', '400M');
require 'lib/s3backup.php';
$bucket = 'thebucketname';
$bucket_dir = 'apts';
$local_dir = "/home/apartmen/public_html/transfer/t/tr";
$s3_backup = new S3_Backup;
$s3_backup->upload_dir( $bucket, $bucket_dir, $local_dir );