19

这个网站已经上线几个月了,一直运行良好。我有一个 PHP 页面,它根据 url 中的数据创建发票(例如 viewinvoice.php?id=250 根据记录 250 构建发票)。该页面可通过网络浏览器访问,并且运行良好。

在一个完全不同的页面(即 test.php)上,我试图通过 cURL 访问该文件。但是,当我拨打电话并 var_dump 结果时,我得到 bool(false)。

这是进行 cURL 调用的函数:

function file_get_contents_curl($url) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

HOME 是一个常量,表示完整的 url(例如http://www.example.com/)。

$invoice_contents = file_get_contents_curl(HOME.'viewinvoice.php?id=242');
echo $invoice_contents;
var_dump( $invoice_contents );

我尝试将 url 更改为外部 url(即http://www.google.com/)并且页面加载得很好。我得到谷歌的主页。但是不会加载同一域中的任何页面。有没有理由会发生这种情况?

我不是服务器管理员,但我对服务器具有 root 访问权限。我最近没有更改任何设置,但是服务器管理员可能已经升级了 apache 或 php 的版本?

无论如何,我可以修改设置以使其再次工作吗?

PS我刚刚尝试从外部服务器(不同的域)进行这个确切的调用,它工作得很好。

4

3 回答 3

55

在你的 curl 执行之后,输入如下内容:

echo curl_getinfo($ch) . '<br/>';
echo curl_errno($ch) . '<br/>';
echo curl_error($ch) . '<br/>';

您将看到在 curl 执行期间失败的原因。

更多信息:curl_getinfo curl_errno curl_error

于 2012-09-10T20:45:01.247 回答
2

执行后放置这个变量来测试你的错误

echo "<pre>";
var_dump( curl_getinfo($ch) ) . '<br/>';
echo curl_errno($ch) . '<br/>';
echo curl_error($ch) . '<br/>';
于 2017-04-19T03:34:15.780 回答
0

我有一个类似的问题,PHP curl 返回错误。接受的答案解决了问题。

我的案例:我有一个网站,它使 PHP curl 调用我的私人服务器以获取数据。它工作了 2 年,但突然 curl 开始返回错误。

  1. 我试图在浏览器中打开我的私人服务器页面,它工作正常。

  2. 我尝试了 PHPfile_get_contents("http://my.server/page.php");并且工作正常。

但是 curl 仍然返回错误。


为了调试 PHP curl,我在这里找到了一个更好的解决方案: Php - Debugging Curl

问题:我的 ISP 出现网络问题,当时我的互联网连接速度从 100Mbps 下降到 1.5Mbps - PHP curl 没有花费足够的时间来等待响应。


解决方案:我在 curl 调用中添加了这 2 行:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 300); //timeout in seconds

我在这里找到:在 PHP 中设置 Curl 的超时

于 2018-11-18T22:28:48.623 回答