gpt4 book ai didi

php - curl_exec 在上传到 s3 时因错误 500 而死

转载 作者:行者123 更新时间:2023-12-04 05:40:37 27 4
gpt4 key购买 nike

我正在使用 POST 请求将带有 curl (php) 的大文件上传到 amazon s3。
当文件很小(几 MB)时 - 它可以工作。当文件有几百 MB 时 - 脚本在 curl_exec 处以错误 500 终止行(我完全知道,因为我在它之前和之后放置了日志记录)。

curl 初始化看起来像

$postdata = array_merge( $headers_array , array('file' => '@' . $filename));           
$curl_handle = curl_init();
curl_setopt( $curl_handle , CURLOPT_URL , $s3_url );
curl_setopt( $curl_handle , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt( $curl_handle , CURLOPT_POST , TRUE );
curl_setopt( $curl_handle , CURLOPT_HEADER , FALSE );
curl_setopt ($curl_handle , CURLOPT_POSTFIELDS, $postdata);

$response = curl_exec( $curl_handle );
`500 here`

我认为,问题是内存不足(或类似问题)。我已要求我的托管服务提供商向我展示 error_log,但也许我现在可以做些什么。

非常感谢!

最佳答案

如果您自己的服务器因 500 错误而死(),则可能是内存不足,请尝试以下步骤。

由于您无法查看错误日志,请确保从脚本文件中输出错误:

ini_set('display_errors', 1);
error_reporting(E_ALL);

增加 php.ini 中的内存限制,或者最好不要在发送之前将整个文件加载到内存中(给 curl 一个文件指针,而不是整个文件内容)。

在这个优秀的 PHP S3 库中可以看到一个示例:

Amazon S3 PHP Class

如果是亚马逊返回 500 错误,这将是确定原因的方法:

来自 here :
以数字“5”开头的响应状态代码表示服务器知道它遇到了错误或无法执行请求的情况。除非响应 HEAD 请求, 服务器应包含一个包含错误情况说明的实体 ,并说明它是暂时的还是永久的。

输出响应头和响应正文以查找原因的描述:
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
$responseBody = curl_exec($curl_handle);
echo $responseBody;
print_r(curl_getinfo($curl_handle));

应该在某处提到原因。

关于php - curl_exec 在上传到 s3 时因错误 500 而死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com