-
-
Save zorgsoft/98654d0db3b5a0ba2758956ff64b904f to your computer and use it in GitHub Desktop.
Запись всех POST-запросов к сайту
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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); | |
}); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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