Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问发布到PHP服务器的所有值_Php_Http - Fatal编程技术网

如何访问发布到PHP服务器的所有值

如何访问发布到PHP服务器的所有值,php,http,Php,Http,我最初以为是在$\u POST超级全局中,但如果URL中包含值,则不是这样 $\u REQUEST这样做了,并没有包括cookies(参考),这让我很惊讶,后来我发现我显然使用了默认的发行版php.ini文件,其中没有包含cookies(参考)的“C”。但是,我不希望使用$\u请求,因为它不区分get请求,更改服务器和php.ini文件可能会引起安全问题 访问所有post值的正确方法是什么 编辑。我添加了$real\u post部分。这是正确的做法吗 <?php setcookie('co

我最初以为是在
$\u POST
超级全局中,但如果URL中包含值,则不是这样

$\u REQUEST
这样做了,并没有包括cookies(参考),这让我很惊讶,后来我发现我显然使用了默认的发行版php.ini文件,其中没有包含cookies(参考)的“C”。但是,我不希望使用
$\u请求
,因为它不区分get请求,更改服务器和php.ini文件可能会引起安全问题

访问所有post值的正确方法是什么

编辑。我添加了
$real\u post
部分。这是正确的做法吗

<?php
setcookie('cookie', 'COOKIE', time() + (86400 * 30), "/");

echo('$_GET<pre>'.print_r($_GET,1).'</pre>');
echo('$_POST<pre>'.print_r($_POST,1).'</pre>');
echo('$_COOKIE<pre>'.print_r($_COOKIE,1).'</pre>');
echo('$_REQUEST<pre>'.print_r($_REQUEST,1).'</pre>');
$real_post=($_SERVER['REQUEST_METHOD'] == 'POST')?array_merge($_GET,$_POST):array(); 
echo('$real_post<pre>'.print_r($real_post,1).'</pre>');
?>

<form action='postorget.php?get=GET' method='post'>
    <input type='text' name='post' value='POST'>
    <input type='submit'>
</form>

美元

排列( [获取]=>获取)

美元邮政

排列( [发布]=>发布)

美元饼干

排列( [cookie]=>cookie)

$\请求

排列( [获取]=>获取 [发布]=>发布)


对不起,你的问题有点不清楚。附加到URL的参数(正如您在开头提到的)是GET参数,因此它们包含在
$\u GET
超全局中。它们根本不是POST变量。那么你的问题是什么?您可以将
$\u POST
$\u GET
组合在一起,或者最好在这两个位置检查所需的参数

你可以在这样的事情上投入无限的时间,但一个方便的方法可能是这样的:

这一行只是一个例子。它从超级全局变量
$\u GET
$\u POST
中检索名为“param”的参数,并将其存储在本地范围内的变量
$params
中。通过这种方式,您可以访问正在查找的任何参数,而不管它是作为GET还是POST参数发送的。我经常将其封装在一个方便的函数中,该函数还负责验证参数的运行时值

您还可以将此示例包装到迭代循环中:

这其实是两个例子。显然,您只需要循环中显示的两条语句中的一条。这取决于您是喜欢参数数组还是单独的局部标量变量


如果您正在寻找一种获取所有get和POST参数的方法,而不知道可能是哪种参数,那么您必须将两个超全局参数组合起来:


但是请注意,这是一个非常值得怀疑的体系结构。它通常会打开安全漏洞

您可以执行以下操作:

$uVariables=array(“GET”=>$\u GET,“POST”=>$\u POST,“COOKIES”=>$\u COOKIES,“SESSION”=>$\u SESSION)


然后使用json_encode()进行数据库存储。如果您以后决定构建日志查看器,您可以使用json_decode()将所有内容恢复到原始状态。

我的理解是,get和POST请求永远不会同时发生,因此我不相信它们是get值,而是真正的POST值,即使PHP将它们显示为get变量。您是对的,您的请求是GET或POST,而不是两者。但这并不意味着不能提供GET和POST参数。也许你不应该,但你可以。可以是PUT/DELETE/OPTIONSthough@DarkBee这当然是对的,但不是这个问题的主题:-)此解决方案只能访问一半的值。我“可以”做一些类似的事情并将两者合并,但这听起来不像是“正确”的方式。我很好奇-你为什么需要这样做?@u_mulder添加了日志功能,并希望跟踪所有GET和POST值,结果让我吃惊。
$param = isset($_GET['param']) ? $_GET['param'] 
                               : (isset($_POST['param']) ? $_POST['param'] 
                                                         : null);
$params = [
    'id'     => null, 
    'key'    => null, 
    'value'  => null, 
    'remark' => null
]; // just as examples
foreach ($params as $key=>$null) {
    // alternative 1: store the value of param $key in a single local scalar variable
    // this results in local variables $id, $key, $value, $remark, just as examples
    $$key = isset($_GET[$key]) ? $_GET[$key] 
                               : (isset($_POST[$key]) ? $_POST[$key] 
                                                      : null);
    // alternative 2: store the value of param $key in a general but local params array
    // this results in the above $params array, but filled with scalar values
    $params[$key] = isset($_GET[$key]) ? $_GET[$key] 
                                       : (isset($_POST[$key]) ? $_POST[$key] 
                                                              : null);
}
$params = array_merge($_GET, $_POST);