Php log all post data

PHP dump $_REQUEST to file

Untested but should do the job, just change request.log to the file you want to write to.

Closing ?> is not necessary, at all. Indeed it’s best practice when writing libraries/etc (not that this is relevant here) to omit it so as to ensure no accidental output of whitespace that could mess up output buffering/headers/etc.

@josh A closing ?> isn’t necessary, actually its not good practice. You can get extra whitespace after the closing tag which can cause errors in your script

I think nowadays this method is easier and faster:

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

You don’t need it, but it will contain true or false value depending on whether the action was successful.

Use serialize() function for dumping. Dump $_SERVER , $_COOKIE , $_POST and $_GET separately (may go to the same file). If you’re planning on debugging with the data it helps to know if the data was part of a POST request or a GET request.

Dumping everything is good for debugging in development, but not so in production. If your application does not have many users, it can work in production too. If you anticipate many users, consider dumping just the $_POST data, or limit server variables to those starting with HTTP_.

/* 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"); 

Thank you for this code snippet, which might provide some limited, immediate help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you’ve made.

This question is in a collective: a subcommunity defined by tags with relevant content and experts.

Источник

Логирование всех POST и GET запросов

Простой способ вести логи средствами php. Статья рассчитана для новичков в программировании.
Бывают ситуации, когда необходимо посмотреть входящие запросы ко всем файлам CMS, либо к файлам в отдельно взятой директории. При большом числе посетителей сайта, анализ файлов access.log становится затруднительным.

Читайте также:  What is lambda expression in java

Представленный ниже пример отлично справляется с этой задачей. Данный способ ведения логов рекомендуется использовать «здесь и сейчас», непосредственно на время отладки. В отличие от стандартного способа, предлагаемого любым нормальным хостинг-провайдером, в данном примере не предусмотрена очистка логов, а по сему его стоит использовать кратковременно, во избежание разрастания файлов post.log и get.log. Данный модуль позволяет записывать лог всех POST и GET запросов к php файлам в выбранной папке (включая вложенные папки).

1. Для начала создаём в корне сайта папку modules, в которой в свою очередь создаём папку log.

2. В ней создадим 2 файла. Назовём их post.log и get.log. В них мы будем записывать логи POST и GET запросов соответственно.

3. В этой же папке создадим файл save_log.php со следующим содержимым:

Кратко разберем данный файл. Используя суперглобальный массив $_SERVER, определяем путь к корневой директории сервера. Затем, используя конкатенацию, получаем полный путь к файлам get.log и post.log. В итоге в переменной $file_get получаем путь вида: «/home/site/public_html/modules/log/get.log«.

Затем, в зависимости от типа запроса, открываем файл post.log, либо get.log, с параметром «a«. Благодаря данному параметру, при каждой последующей записи, указатель перемещается в конец файла. Таким образом, в отличие от параметра «w«, при добавлении новых записей, старые не удаляются.

При помощи функции var_export, записываем информацию о POST, либо GET запросе. Не забываем закрыть файл при помощи функции fclose.

Отлично. Теперь все POST и GET запросы, приходящие на файл save_log.php, бережно сохраняются. Но как же сохранить запросы к другим файлам?

4. Для этого воспользуемся файлом .htaccess. Его необходимо создать в директории, для которой нужно вести логи. В качестве примера используем файл .htaccess, находящийся в корневой папке сайта. Допишем в начало файла следующую строчку:

php_value auto_prepend_file /home/site/public_html/modules/log/save_log.php

Где /home/site/public_html/ — путь до корневой папки сайта.

При помощи добавки php_value auto_prepend_file, мы ставим на выполнение скрипт save_log.php при запуске любого php файла, расположенного как в одной папке с файлом .htaccess, так и в любой из вложенных папок.

Как узнать полный путь до файла save_log.php? Используем для этого магическую константу __DIR__.

Создаём в нашей папке log файл, назовём его dir.php. В данном файле напишем:

Затем откроем этот файл в браузере по адресу: site.ru/modules/log/dir.php. Полученный путь вставляем в файл .htaccess

В конце на забываем удалить файл dir.php.

В результате в файле get.log сохраняется список всех GET запросов:

image

В файле post.log, соответственно сохраняются все POST запросы.

Источник

Логирование всех POST и GET запросов

Простой способ вести логи средствами php. Статья рассчитана для новичков в программировании.
Бывают ситуации, когда необходимо посмотреть входящие запросы ко всем файлам CMS, либо к файлам в отдельно взятой директории. При большом числе посетителей сайта, анализ файлов access.log становится затруднительным.

Представленный ниже пример отлично справляется с этой задачей. Данный способ ведения логов рекомендуется использовать «здесь и сейчас», непосредственно на время отладки. В отличие от стандартного способа, предлагаемого любым нормальным хостинг-провайдером, в данном примере не предусмотрена очистка логов, а по сему его стоит использовать кратковременно, во избежание разрастания файлов post.log и get.log. Данный модуль позволяет записывать лог всех POST и GET запросов к php файлам в выбранной папке (включая вложенные папки).

Читайте также:  Imagick php convert to jpg

1. Для начала создаём в корне сайта папку modules, в которой в свою очередь создаём папку log.

2. В ней создадим 2 файла. Назовём их post.log и get.log. В них мы будем записывать логи POST и GET запросов соответственно.

3. В этой же папке создадим файл save_log.php со следующим содержимым:

Кратко разберем данный файл. Используя суперглобальный массив $_SERVER, определяем путь к корневой директории сервера. Затем, используя конкатенацию, получаем полный путь к файлам get.log и post.log. В итоге в переменной $file_get получаем путь вида: «/home/site/public_html/modules/log/get.log«.

Затем, в зависимости от типа запроса, открываем файл post.log, либо get.log, с параметром «a«. Благодаря данному параметру, при каждой последующей записи, указатель перемещается в конец файла. Таким образом, в отличие от параметра «w«, при добавлении новых записей, старые не удаляются.

При помощи функции var_export, записываем информацию о POST, либо GET запросе. Не забываем закрыть файл при помощи функции fclose.

Отлично. Теперь все POST и GET запросы, приходящие на файл save_log.php, бережно сохраняются. Но как же сохранить запросы к другим файлам?

4. Для этого воспользуемся файлом .htaccess. Его необходимо создать в директории, для которой нужно вести логи. В качестве примера используем файл .htaccess, находящийся в корневой папке сайта. Допишем в начало файла следующую строчку:

php_value auto_prepend_file /home/site/public_html/modules/log/save_log.php

Где /home/site/public_html/ — путь до корневой папки сайта.

При помощи добавки php_value auto_prepend_file, мы ставим на выполнение скрипт save_log.php при запуске любого php файла, расположенного как в одной папке с файлом .htaccess, так и в любой из вложенных папок.

Как узнать полный путь до файла save_log.php? Используем для этого магическую константу __DIR__.

Создаём в нашей папке log файл, назовём его dir.php. В данном файле напишем:

Затем откроем этот файл в браузере по адресу: site.ru/modules/log/dir.php. Полученный путь вставляем в файл .htaccess

В конце на забываем удалить файл dir.php.

В результате в файле get.log сохраняется список всех GET запросов:

image

В файле post.log, соответственно сохраняются все POST запросы.

Источник

PHP log complete request

I currently use this code but it only gives me the current request uri and not the other files etc. I also rewritten all request to my index.php which I have this line of code in.

file_put_contents('foo.txt', $_SERVER['REQUEST_URI'] . PHP_EOL, FILE_APPEND | LOCK_EX); 

4 Answers 4

Here is one option to draw all http requests to a file. This applies to all requests that travel with the HTTP protocol

$myFile = "requestslog.txt"; $fh = fopen($myFile, 'a') or die("can't open file"); fwrite($fh, "\n\n-------------------------------------- -------------------------\n"); foreach($_SERVER as $h=>$v) if(ereg('HTTP_(.+)',$h,$hp)) fwrite($fh, "$h = $v\n"); fwrite($fh, "\r\n"); fwrite($fh, file_get_contents('php://input')); fclose($fh); echo " " 

Thank you, kinda useful and fast thing) I would only add that in PHP7+ line if(ereg(‘HTTP_(.+)’,$h,$hp)) need to be replaced with if(preg_match(‘/HTTP\_(.+)/’,$h,$hp))

Yes, it is. You can make all the requests pass through a php script, so that you can log the action. For example, a simple image request like http://url.com/img.jpg would became http://url.com/index.php?action=download&file=img.jpg , and the script would handle the logging, the file download and correct headers.

Читайте также:  Using dates in java

Also take into account that your http server might be logging the request already, take a look into the access_log of apache if you are using it.

I prefer the approach listed on this gist.

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'); 

You can quickly copy the above file by doing curl -O https://gist.githubusercontent.com/magnetikonline/650e30e485c0f91f2f40/raw/cbc114d0af29eaad80f75b69732d757971c71fd0/dumprequest.php > dumprequest.php .

The output will be something like

GET /dumprequest.php HTTP/1.1

HTTP headers: Authorization: User-Agent: PostmanRuntime/7.29.0 Accept: / Cache-Control: no-cache Host: somehost.com Accept-Encoding: gzip, deflate, br Connection: keep-alive

Request body: hi=ricardo

Источник

PHP. Отследить REQUEST запрос с помощью логирования в файл

Данный материал предоставлен сайтом PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.

Отслеживаем входящие GET и POST параметры с помощью логирования.

Данный рецепт может потребоваться, тогда когда у вас есть некое апи(сокр. api — application programming interface — программный интерфейс приложения, интерфейс прикладного программирования), которое должно принимать входящие данные со сторонних сервисов различными типами запросов.
Если вам потребовалось отследить входящие параметры, то можно воспользоваться логированием данных входящих запросов.

Если вы не совсем уверены какого типа у вас запрос(GET или POST), то можно воспользоваться глобальной переменной $_REQUEST.
Данная глобальная переменная представляет из себя ассоциативный массив, который содержит в себе GET, POST и COOKIE данные.
Но в остальных случаях желательно использовать реально требуемые типы запросов.

С помощью данной конструкции вы можете выполнять логирование в файл:

ob_start(); var_dump($_REQUEST); $output = ob_get_clean(); file_put_contents('log.txt', $output, FILE_APPEND);
  • 1 строка. Функция ob_start — включает буферизацию вывода. До тех пор, пока буферизация активна, никакой вывод скрипта (кроме заголовков) не будет сохраняться во внутреннем буфере.
  • 2 строка. С помощью функции var_dump выводим информацию о глобальной переменной $_REQUEST.
  • 3 строка. Получаем содержимое текущего буфера с помощью функции ob_get_clean, записываем в переменную $output, после чего функция ob_get_clean чистит содержимое текущего буфера.
  • 4 строка. Пишем данные в файл с помощью функции file_put_contents, где первым параметром указываем местоположение файла с логами, вторым параметром передаем данные, которые будут должны записаться в файл с логами (В нашем случае это параметры входящего запроса, которые были приняты из текущего буфера) и третий параметр содержит константу FILE_APPEND (данная константа позволяет функции file_put_contents дописывать данные в файл с логами, не перезаписывая ранее полученные данные).

В данной статье мы разобрали, то каким образом можно отловить и записать входящие данные GET(гет), POST(пост) или COOKIE(куки) типов запросов в файл.

Источник

Оцените статью