如何运行公共函数来运行所有PHP cURL请求?

时间:2015-07-07 22:20:19

标签: php curl

我使用cURL为我的所有请求设置了基本的RESTful API。

目前,我正试图将我的所有功能拆分为一个能够运行我所有请求的功能。

例如,我可以从localhost/api/getUserData

调用以下内容
private function getUserData() {
     $url = 'localhost/api/users/';
     runApiCall($url);
}

然后该功能继续将URL传递给runApiCall(),如下所示:

function runApiCall($url) {

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_COOKIE, 'PHPSESSID=' . $_COOKIE['PHPSESSID']);
     $result = curl_exec($ch);
     curl_close($ch);

     $this->response($result, 200);
}

虽然我在http://localhost/api/getUserData 500 (Internal Server Error)

的控制台中收到错误

在我拆分之前,API工作得很好。

修改

如果我只是将我的getUserData()功能更改为以下功能,那么它的效果非常好:

private function getUserData() {
     $url = 'localhost/api/users/';

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
     curl_setopt($ch, CURLOPT_COOKIE, 'PHPSESSID=' . $_COOKIE['PHPSESSID']);

     $result = curl_exec($ch);
     $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
     curl_close($ch);
     $this->response($this->json($result), $status);
}

2 个答案:

答案 0 :(得分:1)

你在课堂上遇到了范围问题。

private function getUserData() {
     $url = 'localhost/api/users/';
     $this->runApiCall($url); // call $this object's runAppCall() function
}

答案 1 :(得分:1)

如果启用了错误处理,您将看到PHP抛出的错误,告诉您它无法找到方法runApiCall()。这是因为你在一个类中,必须明确地告诉PHP在类上运行该方法。

您可以通过以下方式执行此操作:

private function getUserData() {
     $url = 'localhost/api/users/';

     // EITHER
     $this->runApiCall($url); 

     // OR
     self::runApiCall($url);
}

将来,我建议您在开发时在应用程序的路径中添加此行,然后在生产中将其设置为false:

ini_set('display_errors', 1);

现在,这会将任何PHP错误记录到浏览器中,使您更容易调试。