我正在上传一个带有curl (php)的大文件到亚马逊s3,使用POST请求。
当文件很小(几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,但也许我现在可以做些什么。
非常感谢!
发布于 2012-07-02 21:37:58
如果你自己的服务器死于500错误,你可能会耗尽内存,尝试这些步骤。
由于您无法查看错误日志,因此请确保从脚本文件中输出错误:
ini_set('display_errors', 1);
error_reporting(E_ALL);增加php.ini中的内存限制,或者在发送文件之前最好不要将整个文件加载到内存中(给curl一个文件指针,而不是整个文件内容)。
在这个优秀的PHP S3库中可以看到一个示例:
Amazon S3 PHP Class
如果是Amazon返回了500错误,这将是确定原因的方法:
来自here:以数字"5“开头的响应状态代码表示服务器意识到遇到错误或无法执行请求的情况。除非响应HEAD请求,否则服务器应包括一个实体,该实体包含对错误情况的解释,并指明这是暂时的还是永久的情况。
输出响应头和响应体,查找原因描述:
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
$responseBody = curl_exec($curl_handle);
echo $responseBody;
print_r(curl_getinfo($curl_handle));原因应该在那里的某个地方被提及。
https://stackoverflow.com/questions/11294073
复制相似问题