PHP将$_REQUEST转储到文件

v64noz0r  于 2023-01-01  发布在  PHP
关注(0)|答案(5)|浏览(129)

我想把请求变量转储到一个文件中进行调试,这怎么可能呢?

5rgfhyps

5rgfhyps1#

<?php
$req_dump = print_r($_REQUEST, TRUE);
$fp = fopen('request.log', 'a');
fwrite($fp, $req_dump);
fclose($fp);

未经测试,但应该可以完成这项工作,只需将request.log更改为要写入的文件。

col17t5w

col17t5w2#

我认为现在这种方法更容易和更快:

$req_dump = print_r($_REQUEST, true);
$fp = file_put_contents('request.log', $req_dump, FILE_APPEND);
3qpi33ja

3qpi33ja3#

使用serialize()函数转储。分别转储$_SERVER$_COOKIE$_POST$_GET(可能转到同一个文件)。如果您计划使用数据进行调试,则了解数据是POST请求还是GET请求的一部分会有所帮助。
转储所有内容有利于开发中的调试,但不利于生产中的调试。如果您的应用程序没有太多用户,它也可以在生产中工作。如果您预计会有很多用户,请考虑仅转储$_POST数据,或将服务器变量限制为以HTTP_开头的变量。

umuewwlo

umuewwlo4#

/* may be late but he can help others.
it's not my code, I get it from : 
https://gist.github.com/magnetikonline/650e30e485c0f91f2f40
*/

            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 .= "\nRequest body:\n";
                    file_put_contents(
                        $targetFile,
                        $data . file_get_contents('php://input') . "\n"
                    );
                    echo("Done!\n\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');

            // add this line at the end to create a file for each request with timestamp

            $date = new DateTime();
            rename("dumprequest.txt", "dumprequest" . $date->format('Y-m-d H:i:sP') . ".txt");
epfja78i

epfja78i5#

<?php //log

$razdelitel = '--------------------------------------------'.PHP_EOL . date("Y-m-d H:i:s") .PHP_EOL.PHP_EOL;

$data_REQUEST = '$_REQUEST: ' . print_r($_REQUEST, true).PHP_EOL;
$data_POST = '$_POST: ' . print_r($_POST, true).PHP_EOL;
$data_GET = '$_GET: ' . print_r($_GET, true).PHP_EOL;

$data_all = $razdelitel . $data_REQUEST . $data_POST . $data_GET;

$name_txt = __DIR__ . '/log_' . date('m.Y') . '.txt'; //log_12.2021.txt

$chmod = '0244';
chmod($name_txt, $chmod); 

file_put_contents($name_txt, $data_all, FILE_APPEND);
//var_dump($name_txt, $chmod); ?>

相关问题