您好我正在尝试从$_POST
请求中获取所有值并记录它。
这是我的代码:
<?php
$file = 'error_log.log';
$info = date("Y-m-d H:i:s")." - ".print_r($_POST, true)."\n";
foreach ($_POST as $key => $value) {
foreach($value as $k => $v) {
$info .= $k."\n";
$info .= $v."\n";
}
}
$current = file_get_contents($file);
$current .= $info;
file_put_contents($file, $current);
?>
但我的问题是我得到的只是“数组”。
像这样:
2014-01-01 17:32:50 - Array
(
)
2014-01-01 17:34:13 - Array
(
)
2014-01-01 17:47:39 - Array
(
)
2014-01-01 17:47:40 - Array
(
)
答案 0 :(得分:2)
数组来自print_r($_POST, true);
。 $ _POST总是一个数组,如果数组为空,那么除了你正确的输出。所以基本上这意味着你不发送任何东西作为POST也许你正在使用get?
您可以做的是检查是否有任何内容发布。
if (count($_POST) > 0) {
$info .= print_r($_POST, true);
}
如果您在发生错误时将用户重定向到此页面,则不会向用户重定向POST值。如果这是一个错误捕获页面,也许您应该在数据中保存$_SERVER['REQUEST_URI']
,这样您就知道错误发生在哪个页面。
正如我在评论中所说,你可以用这个优化你的文件写作。
file_put_contents($file, $info, FILE_APPEND | LOCK_EX);
它锁定文件,因此其他脚本无法同时写入文件,并将信息附加到文件末尾。所以你可以用一个命令替换这些行。
$current = file_get_contents($file);
$current .= $info;
file_put_contents($file, $current);
整个脚本
<?php
$file = 'error_log.log';
$info = date("Y-m-d H:i:s") . " - " . $_SERVER['REQUEST_URI'] . "\n";
$info .= "POST: " . ((count($_POST))?print_r($_POST,true):"EMPTY\n");
$info .= "GET : " . ((count($_GET))?print_r($_GET,true):"EMPTY\n") . "\n";
file_put_contents($file, $info, FILE_APPEND | LOCK_EX);
输出示例
2014-01-01 17:33:25 - /stack/error.php
POST: EMPTY
GET : EMPTY
2014-01-01 17:34:11 - /stack/error.php?ads=bsd&error=true
POST: EMPTY
GET : Array
(
[ads] => bsd
[error] => true
)
答案 1 :(得分:1)
你让它变得更复杂。而不是:
foreach ($_POST as $key => $value) {
foreach($value as $k => $v)
{
$info .= $k."\n";
$info .= $v."\n";
}
}
只是
foreach ($_POST as $key => $value) {
$info .= $key."\n";
$info .= $value."\n";
}