从$ _POST获取返回“Array”的字符串

时间:2014-01-01 15:51:47

标签: php

您好我正在尝试从$_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
(
)

2 个答案:

答案 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";

}