簡體   English   中英

我如何有一個公共函數來運行所有PHP cURL請求?

[英]How can I have a public function to run all my PHP cURL requests?

我有一個基本的RESTful API設置,所有請求都使用cURL。

目前,我正嘗試將我的所有功能拆分為一個可以運行所有請求的功能。

例如,我有以下內容可以從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)出現錯誤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);
}

在類內部時,范圍存在問題。

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

如果啟用了錯誤處理,則會看到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錯誤記錄到瀏覽器中,從而使調試變得更加容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM