Skip to content

Instantly share code, notes, and snippets.

@zorgsoft
Forked from mnoskov/.htaccess
Created January 9, 2020 10:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zorgsoft/98654d0db3b5a0ba2758956ff64b904f to your computer and use it in GitHub Desktop.
Save zorgsoft/98654d0db3b5a0ba2758956ff64b904f to your computer and use it in GitHub Desktop.
Запись всех POST-запросов к сайту
php_value open_basedir "/path:/tmp"
php_value mail.add_x_header 1
php_value mail.log /path/mail.log
php_value auto_prepend_file /path/postlogger.php
<?php
/**
* Если на входе POST-запрос, записываем все данные в файл post_requests.log.
* Также осуществляем ротацию логов.
*
* Данный скрипт должен автоматически включаться в каждый скрипт с помощью инструкции,
* размещенной в файле .htaccess:
*
* php_value auto_prepend_file /full/path/to/site/dir/postlogger.php
*/
if (!empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
register_shutdown_function(function() {
if (defined('IN_MANAGER_MODE') && IN_MANAGER_MODE == true || defined('DIR_CATALOG')) {
return;
}
$folder = __DIR__ . '/';
$filename = $folder . 'post_requests.log';
$maxsize = 500000; // 50kb
$maxfiles = 5;
if(is_writeable($filename)){$parts=pathinfo($filename);if(filesize($filename)>$maxsize){$haveZip=class_exists('ZipArchive');$ext=$haveZip?'zip':'log';$previous=glob($folder.$parts['basename'].'.*.'.$ext);foreach(array_reverse($previous,true)as $i => $prev){if($i<$maxfiles){rename($prev,$folder.$parts['basename'].'.'.($i+1).'.'.$ext);}else{unlink($prev);}}if($haveZip){$zip=new ZipArchive;if($zip->open($folder.$parts['basename'].'.0.zip',ZipArchive::CREATE)===true){$zip->addFile($filename,$parts['basename']);$zip->close();unlink($filename);}}else{rename($filename,$folder.$parts['basename'].'.0.log');}}}$ip='';foreach(['HTTP_CLIENT_IP','HTTP_X_FORWARDED_FOR','REMOTE_ADDR','SERVER_ADDR']as $field){if(!empty($_SERVER[$field])&& strpos($_SERVER[$field],',')===false){$ip=$_SERVER[$field];break;}}$text=str_repeat('-',80)."\n\n".date('Y-m-d H:i:s').' - '.$_SERVER['REQUEST_URI']."\n\nIP: $ip\n\n";$postdata=file_get_contents("php://input");if(!empty($postdata)){$text.="RAWPOST = ".print_r($postdata,1)."\n\n";}foreach(['_POST','_FILES','_GET']as $arr){$a=$GLOBALS[$arr];if(!empty($a)){$text.="\$$arr = ".print_r($a,1)."\n\n";}}file_put_contents($filename,$text,FILE_APPEND);
});
}
<?php
/**
* Если на входе POST-запрос, записываем все данные в файл post_requests.log.
* Также осуществляем ротацию логов.
*
* Данный скрипт должен автоматически включаться в каждый скрипт с помощью инструкции,
* размещенной в файле .htaccess:
*
* php_value auto_prepend_file /full/path/to/site/dir/postlogger.php
*/
if (!empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
register_shutdown_function(function() {
if (defined('IN_MANAGER_MODE') && IN_MANAGER_MODE == true || defined('DIR_CATALOG')) {
return;
}
$folder = __DIR__ . '/';
$filename = $folder . 'post_requests.log';
$maxsize = 500000; // 50kb
$maxfiles = 5;
if (is_writeable($filename)) {
$parts = pathinfo($filename);
if (filesize($filename) > $maxsize) {
$haveZip = class_exists('ZipArchive');
$ext = $haveZip ? 'zip' : 'log';
$previous = glob($folder . $parts['basename'] . '.*.' . $ext);
foreach(array_reverse($previous, true) as $i => $prev) {
if ($i < $maxfiles) {
rename($prev, $folder . $parts['basename'] . '.' . ($i + 1) . '.' . $ext);
}
else {
unlink($prev);
}
}
if ($haveZip) {
$zip = new ZipArchive;
if ($zip->open($folder . $parts['basename'] . '.0.zip', ZipArchive::CREATE) === true) {
$zip->addFile($filename, $parts['basename']);
$zip->close();
unlink($filename);
}
}
else {
rename($filename, $folder . $parts['basename'] . '.0.log');
}
}
}
$ip = '';
foreach(['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'SERVER_ADDR'] as $field) {
if (!empty($_SERVER[$field]) && strpos($_SERVER[$field], ',') === false) {
$ip = $_SERVER[$field];
break;
}
}
$text = str_repeat('-', 80) . "\n\n" . date('Y-m-d H:i:s') . ' - ' . $_SERVER['REQUEST_URI'] . "\n\nIP: $ip\n\n";
$postdata = file_get_contents("php://input");
if (!empty($postdata)) {
$text.= "RAWPOST = " . print_r($postdata, 1) . "\n\n";
}
foreach (['_POST', '_FILES', '_GET'] as $arr) {
$a = $GLOBALS[$arr];
if (!empty($a)) {
$text .= "\$$arr = " . print_r($a, 1) . "\n\n";
}
}
file_put_contents($filename, $text, FILE_APPEND);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment