У меня есть центральный PHP-скрипт, который я использую для обработки многих запросов со своей страницы, используя вызовы XMLHttpRequest () из JavaScript, используя метод GET.Мой сервер PHP в настоящее время 5.6, и да, я избегаю синхронных вызовов.
Все работает хорошо, однако есть случаи, когда я предпочел бы, чтобы запрос НЕ оставался в истории браузера или даже отображался в URL.Поэтому, основываясь на ссылке MDN на этот вызов, я подумал, что могу просто переключиться на метод POST, сохранив мои существующие запросы (например, "http://myscript.php? Cmd = dothis & data = somedata «).тогда все, что мне нужно сделать, это добавить некоторый код в мой PHP-скрипт, чтобы я мог собрать переданные данные в любом случае ...
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if(isset($_GET['cmd'])) $cmd = $_GET['cmd'];
if(isset($_GET['data'])) $data = $_GET['data'];
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if(isset($_POST['cmd'])) $cmd = $_POST['cmd'];
if(isset($_POST['data'])) $data = $_POST['data'];
}
Ну, очевидно, я был совершенно неправ.Я обнаружил, что ...
- Ни одна из переменных, показанных в этом примере, не видна сценарием в массиве $ _POST, когда я переключаюсь на метод POST.
- Переключениеиз массива $ _POST в массив $ _REQUEST работает нормально (например: "if (isset ($ _ REQUEST ['cmd'])) $ cmd = $ _REQUEST ['cmd']);"), НО ....
- Само выполнение моих вызовов XMLHttpRequest () с помощью метода POST приводит к таким ошибкам в моем журнале:
PHPУстаревшее: автоматическое заполнение $ HTTP_RAW_POST_DATA устарело и будет удалено в следующей версии.Чтобы избежать этого предупреждения, установите «always_populate_raw_post_data» на «-1» в php.ini и используйте вместо этого поток ввода php: //.в Unknown в строке 0
Так что, очевидно, это тупик.Делая все возможное, чтобы исследовать, что происходит здесь, в справочнике PHP по POST я прочитал это прямо сверху ...
$ _ POST $ HTTP_POST_VARS [устарело]
Поэтому, если я правильно понимаю, причина, по которой я могу получить только переменные POST с помощью массива $ _REQUEST, заключается в том, что мои запросы по-прежнему отформатированы так, как если бы я все еще использовал GET, что (очевидно?) является устаревшим методом.Поэтому «уговорить» его на работу - это просто перенести проблему в будущее.
Между прочим, я могу видеть, вызвав phpinfo.php на моем сервере, что, несмотря на ОШИБКУ, которую я вижу в моих журналах, «always_populate_raw_post_data» действительно уже имеет значение «-1».Таким образом, все «решения», которые я нашел, рекомендовавшие мне «ПРОСТО» сделать эту настройку в моем файле PHP.INI, не помогают.
И даже если он «скрыл» ошибку, это не имеет значения длямне.Я ошибаюсь, говоря, что даже если я просто соберу мои переданные переменные PHP из массива $ _REQUEST при использовании метода POST, И придумаю способ подавления «устаревших» предупреждений в моем LOG, вся схема все равно развалится (и заставляет мои запросы POST терпеть неудачу), день, когда я наконец-то мигрирую на PHP 7.x.?
Я прошу прощения за вопрос здесь, но я действительно пытался найти все ссылки, которые я мог найти для выполнения XMLHttpRequests, используя POSTметод и устаревшие сообщения об ошибках, которые я получаю в своих журналах.Существует так много устаревшей информации, что я не могу найти никакого четкого обсуждения того, как ПРАВИЛЬНО изменить или переформатировать мои запросы XMLHttpRequest, чтобы я мог использовать метод POST.На самом деле, я даже не могу точно определить, будет ли это возможно за пределами PHP.5.6.Буду очень признателен за любую помощь.