【发布时间】:2013-12-01 22:12:42
【问题描述】:
我有一个 curl put 请求,它在我的本地主机上运行良好,但在实时服务器上它会抛出 500 错误。这是我的代码:
public static function send( $xml )
{
$xml = str_replace( "\n", "", $xml );
//Write to temporary file
$put_data = tmpfile();
fwrite( $put_data, $xml );
fseek( $put_data, 0 );
$options = array(
CURLOPT_URL => 'http://*****************/cgi-bin/commctrl.pl?SessionId=' . Xml_helper::generate_session_id() . '&SystemId=live',
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPHEADER => array( 'Content-type: text/xml' ),
CURLOPT_PUT => TRUE,
CURLOPT_INFILE => $put_data,
CURLOPT_INFILESIZE => strlen( $xml )
);
$curl = curl_init();
curl_setopt_array( $curl, $options );
$result = curl_exec( $curl );
curl_close( $curl );
return $result;
}
我确实在服务器上启用了 curl!
有没有人知道为什么它不能在服务器上运行?如果有帮助,我会使用共享主机。
我还在文件顶部启用了错误报告,但 curl 完成后没有错误显示。我只是得到通用的 500 错误页面。
谢谢
更新:
我已与客户联系,他们已确认发送的信息已被他们接收并已插入他们的后台系统。因此,它必须与作为原因的响应有关。它是假设要返回的一小块 xml。
另一个更新
我在不同的服务器和 heroku 上尝试了相同的脚本,但仍然得到相同的结果。
另一个更新
我想我可能已经找到了问题的出路。由于 FastCGI 超时,脚本似乎超时,而且因为我在共享主机上,所以我无法更改它。谁能证实这一点?
最终更新
我联系了我的托管服务提供商,他们确认脚本超时是由于服务器上的超时值而不是我可以使用任何 PHP 函数或 ini_set() 访问的超时值。
【问题讨论】:
-
服务器上产生错误500,这里
http://************/cgi-bin/commctrl.pl?SessionId=...,不是curl产生的。您需要做的是查看远程主机上的错误日志,而不是在运行 curl 脚本的主机上。 -
感谢您的反馈,但它是如何在我的本地主机上工作的?无论我从哪里访问它,它都不会返回 500 错误???
-
你的非本地服务器是否安装了 curl 库?
-
是的,我在帖子中提到过
-
你死了($result);在返回 $result; 之前