php - curl_exec 导致 php 脚本停止执行任何操作

标签 php curl

当我在特定 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;

最佳答案

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

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

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

error_reporting=E_ALL

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

extension=php_curl.dll

一旦你编辑了这个值,不要忘记重新启动你的网络服务器(Apache 或 Nginx)

我也同意我同事的看法,你应该url_encode你的 JSON 字符串。

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

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);

$apiKey = '*apikey*';
$filters = '{"category":"Automotive","$loc":{"$within":{"$center":[[41,-74],80467.2]}},"website":{"$blank":false}}';
$params = '?api_key=' . $apiKey . '&filters=' . url_encode($filters);

$url = 'http://api.factual.com/v2/tables/bi0eJZ/read';
$url .= $params;

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$output = curl_exec($ch) or die("cURL Error" . curl_error($ch));   
curl_close($ch);

echo "out: " . $output;

编辑:

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

它提供了一个 Debug ModecURL Debug Output和一个 Exception Debug Output .

关于php - curl_exec 导致 php 脚本停止执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995198/

相关文章:

php - 如何避免 rtl 语言中 url 地址的更改

python - 读取 curl 创建的 cookies 文件

php - fork 一部分php代码

php - 如何在 PHP 中使用 cURL 连接到 Tor 隐藏服务?

php - 在 codeigniter 中不在对象上下文中时使用 $this

php - 使用 AJAX 将多个输入表单字段 POST 到 mySQL db

php - 为什么 php 表单生成器类没有运行?

javascript - Ajax请求不发送数据到php页面但登录控制台正常

PHP CURL - 没有错误的空输出

php - 获取远程文件的最后修改日期