[PHP] 開發接收端 API 時的 DEBUG 除錯方法

這案例就像是正在開發一個 Web Hook 端的應用,他文件寫一堆,但還是實際看到送過來的東西比較實在,對吧?

這時候「存起來」或「印出來」就是最棒的拉!

剛剛找到一個網友分享他寫的紀錄請求方式,滿完整的如下:

Gist: Link

class DumpHTTPRequestToFile {
    public function execute($targetFile) {
        $data = sprintf(
            "%s %s %s\n\nHTTP headers:\n",
            $_SERVER['REQUEST_METHOD'],
            $_SERVER['REQUEST_URI'],
            $_SERVER['SERVER_PROTOCOL']
        );
        foreach ($this->getHeaderList() as $name => $value) {
            $data .= $name . ': ' . $value . "\n";
        }
        $data .= "\nResponse body:\n";
        file_put_contents(
            $targetFile,
            $data . file_get_contents('php://input') . "\n"
        );
    }
    private function getHeaderList() {
        $headerList = [];
        foreach ($_SERVER as $name => $value) {
            if (preg_match('/^HTTP_/', $name)) {
                // convert HTTP_HEADER_NAME to Header-Name
                $name = strtr(substr($name, 5), '_', ' ');
                $name = ucwords(strtolower($name));
                $name = strtr($name, ' ', '-');
                // add to list
                $headerList[$name] = $value;
            }
        }
        return $headerList;
    }
}
(new DumpHTTPRequestToFile)->execute('./dumprequest.txt');

我修改如他那Gist下方討論建議把 echo「Done」的部分移除,畢竟在實戰除錯階段不需要把「完成除錯」當作內容一起吐吧?XD

使用時要注意 file_put_contents 在操作寫檔動作時會需要有對應權限,而權限給伺服器的使用者與群組就好囉!

查找方式為:

ps aux | egrep '(apache|httpd|nginx)'

看向如圖的最右側就會看到使用者(我這邊舉例為 Nginx 的使用者為 www

使用Nginx為例

改變寫入檔案權限的指令如下:

chown www:www /path/to/file

自行改路徑即可!(也要注意下指令時的權限是否正確哦)

以上,在看開發時要把這檔案在哪個請求前面引用就好拉~ 紀錄的資訊像下面這格式,很清楚!

GET /dumprequest.php HTTP/1.1

HTTP headers:
Host: localhost
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Referer: http://localhost/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6

Response body:

Facebook 外掛整合

Share: