curl_exec导致PHP脚本停止运行任何操作。

27 浏览
0 Comments

curl_exec导致PHP脚本停止运行任何操作。

当我在一个特定的url上运行curl时,该网站停止响应,尽管我已经设置了错误报告为开启状态。我尝试将curl超时时间设置为低值,然后它就会生成错误,所以我知道它不是超时的问题。

我最想知道的是,这怎么可能发生,我该如何找出原因?

我正在尝试访问的url是一个调用Factual api的请求,我在这里使用的url是

(http://api.factual.com/v2/tables/bi0eJZ/read?api_key=*apikey*&filters={\"category\":\"Automotive\",\"$loc\":{\"$within\":{\"$center\":[[41,-74],80467.2]}})

如果您将其放入浏览器中,则可以使用。如果您将纬度和经度更改为其他任何值,则php脚本将按预期工作。

error_reporting(E_ALL);
ini_set('display_errors', '2');
$url="http://api.factual.com/v2/tables/bi0eJZ/read?api_key=*apikey*&filters={\"category\":\"Automotive\",\"\$loc\":{\"\$within\":{\"\$center\":[[41,-74],80467.2]}},\"website\":{\"\$blank\":false}}";
Echo "\n\n1";
$ch = curl_init($url);
Echo 2;
curl_setopt($ch, CURLOPT_HEADER, 0);
Echo 3;
curl_setopt($ch, CURLOPT_POST, 1);
Echo 4;
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
Echo 5;
$output = curl_exec($ch) or die("hhtrjrstjsrjt".curl_error($ch));   
Echo 6;
curl_close($ch);
Echo "out: ".$output;

admin 更改状态以发布 2023年5月22日
0
0 Comments

您的URL未进行URL编码,因为CURL是一个外部应用程序,所以必须进行转义。您的浏览器将在URL上自动对参数进行URL编码,但是您可能会在服务器上破坏CURL并使其停止工作。

尝试将此更改为:

$url="http://api.factual.com/v2/tables/bi0eJZ/read?api_key=*apikey*&filters={\"category\":\"Automotive\",\"\$loc\":{\"\$within\":{\"\$center\":[[41,-74],80467.2]}},\"website\":{\"\$blank\":false}}";

到:

$url_filters = '{"category":"Automotive","$loc":{"$within":{"$center":[[41,-74],80467.2]}},"website":{"$blank":false}}';
$url="http://api.factual.com/v2/tables/bi0eJZ/read?api_key=*apikey*&filters=".urlencode($url_filters);

然而,我确实有一些问题:您的调用是否正确?文字“$loc”的键是否正确?

更新以消除需要反斜杠所有内容的要求,单引号不支持变量替换,将允许双引号而不需要转义它们

0
0 Comments

看起来你的PHP配置文件中有一些错误。

要修复错误,你必须编辑你的php.ini文件。

为了在开发模式下显示错误,将error_reporting的值改为E_ALL

error_reporting=E_ALL

然后你必须启用cURL扩展。
要在php.ini中启用它,你需要取消下面一行的注释:

extension=php_curl.dll

一旦你编辑了这些值,别忘了重启你的web服务器(Apache或Nginx)

另外,我同意我的同事们的意见,你应该对你的JSON字符串进行url_encode

从我的角度来看,代码应该是:


编辑:

另一种方法是使用Factual API的官方PHP驱动程序:Factual API的官方PHP驱动程序

它提供了一个调试模式,其中包括一个cURL调试输出和一个异常调试输出

0