Как получить доступ ко всем значениям, размещенным на сервере PHP

0

Я сначала подумал, что это было в супер-глобальном $_POST, но это не значит, что значения включены в URL.

$_REQUEST сделал это и удивил меня, не включая файлы cookie (ссылка http://php.net/manual/en/reserved.variables.request.php), и позже я обнаружил, что я, очевидно, использую файл php.ini по умолчанию который не содержит "C" для файлов cookie (ссылка http://php.net/manual/en/ini.core.php#ini.request-order). Однако я не хочу использовать $_REQUEST, поскольку он не различает запрос на получение, а смена серверов и файлов php.ini может вызвать проблему безопасности.

Каков надлежащий способ доступа ко всем значениям почты?

РЕДАКТИРОВАТЬ. Я добавил часть $real_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>

$ _GET

Массив ([get] => GET)

$ _POST

Массив ([post] => POST)

$ _COOKIE

Массив ([cookie] => COOKIE)

$ _REQUEST

Массив ([get] => GET [post] => POST)

  • 0
    Мне любопытно - зачем тебе это?
  • 0
    @u_mulder Добавил функцию ведения журнала и хотел отслеживать все значения GET и POST, и результаты меня удивили.
Теги:
http

2 ответа

0

Извините, ваш вопрос немного неясен. Параметры, добавленные к URL-адресу (как вы упоминаете в начале), являются параметрами GET, поэтому они содержатся в $_GET файле $_GET. Они просто не являются переменными POST. Так в чем ваш вопрос? Вы можете комбинировать $_POST и $_GET или, предпочтительно, проверять требуемый параметр в обоих местоположениях.

Вы можете вкладывать бесконечное время в такие вещи, но удобный подход может выглядеть так:

$param = isset($_GET['param']) ? $_GET['param'] 
                               : (isset($_POST['param']) ? $_POST['param'] 
                                                         : null);

Эта строка является всего лишь примером. Он извлекает параметр с именем "param" из суперглабильных значений $_GET или $_POST и сохраняет его в переменной $params в локальной области. Таким образом, вы можете получить доступ к любому параметру, который вы ищете, независимо от того, отправлен ли он как GET или как параметр POST. Я часто обертываю это в функцию удобства, которая также заботится о проверке значения времени выполнения параметров.

Вы также можете обернуть этот пример в цикл итерации:

$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);
}

Это на самом деле два примера. Очевидно, вам нужно только одно из двух утверждений, показанных внутри цикла. Это зависит от того, предпочитаете ли вы массив параметров или отдельные локальные скалярные переменные.


Если вы ищете способ получить все параметры GET и POST, даже не зная, что это может быть, тогда вам нужно объединить два супер-глобала:

$params = array_merge($_GET, $_POST);

Обратите внимание, что это очень сомнительная архитектура. Обычно он открывает дыры в безопасности.

  • 0
    Насколько я понимаю, запросы GET и POST никогда не могут выполняться одновременно, поэтому я не верю, что они являются значениями GET, но действительно значениями POST, даже если PHP показывает их как переменные GET.
  • 0
    Вы правы, что ваш запрос либо GET, либо POST, а не оба. Но это не значит, что вы не можете предоставить параметры GET и POST. Может быть, вы не должны, но вы можете.
Показать ещё 7 комментариев
0

Вы могли бы сделать что-то вроде:

$ uVariables = array ("GET" => $ _GET, "POST" => $ _POST, "COOKIES" => $ _COOKIES, "SESSION" => $ _SESSION);

а затем используйте json_encode() для хранения базы данных. Если позже вы решите создать просмотрщик журналов, вы можете просто использовать json_decode() и вернуть все в исходное состояние.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню