Я разработал веб-приложение на PHP. Я даю пользователю возможность обновить несколько проблем за один раз. При этом иногда пользователь сталкивается с этой ошибкой. Есть ли способ увеличить длину URL-адреса в apache?
Я разработал веб-приложение на PHP. Я даю пользователю возможность обновить несколько проблем за один раз. При этом иногда пользователь сталкивается с этой ошибкой. Есть ли способ увеличить длину URL-адреса в apache?
Ответы:
В Apache предел - это настраиваемое значение LimitRequestLine
. Измените это значение на большее, чем значение по умолчанию 8190, если вы хотите поддерживать более длинный URI запроса. Значение находится в /etc/apache2/apache2.conf . Если нет, добавьте новую строку ( LimitRequestLine 10000
) под AccessFileName .htaccess
.
Однако учтите, что если вы на самом деле столкнулись с этим пределом, вы, вероятно, GET
с самого начала злоупотребляете . Вы должны использовать его POST
для передачи такого рода данных - тем более, что вы даже признаете, что используете его для обновления значений. Если вы проверите ссылку выше, вы заметите, что Apache даже говорит: «В нормальных условиях значение не должно изменяться по сравнению со значением по умолчанию».
POST
. Ничто в использовании POST не мешает вам заполнять ту же форму только что опубликованными полями, поэтому я не уверен, что вы имеете в виду.
LimitRequestLine
в своем файле httpd.conf, просто добавьте строку самостоятельно в любом месте. Например:LimitRequestLine 100000
Основываясь на ответе Джона, я изменил запрос GET на запрос POST. Он работает без изменения конфигурации сервера. Итак, я пошел искать, как это реализовать. Следующие страницы были полезны:
Пример jQuery Ajax POST с PHP (обратите внимание на примечание об очистке опубликованных данных) и
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
По сути, разница в том, что запрос GET имеет URL-адрес и параметры в одной строке, а затем отправляет null:
http.open("GET", url+"?"+params, true);
http.send(null);
тогда как запрос POST отправляет URL-адрес и параметры в отдельных командах:
http.open("POST", url, true);
http.send(params);
Вот рабочий пример:
ajaxPOST.html:
<html>
<head>
<script type="text/javascript">
function ajaxPOSTTest() {
try {
// Opera 8.0+, Firefox, Safari
ajaxPOSTTestRequest = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
ajaxPOSTTestRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajaxPOSTTestRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
ajaxPOSTTestRequest.onreadystatechange = ajaxCalled_POSTTest;
var url = "ajaxPOST.php";
var params = "lorem=ipsum&name=binny";
ajaxPOSTTestRequest.open("POST", url, true);
ajaxPOSTTestRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajaxPOSTTestRequest.send(params);
}
//Create a function that will receive data sent from the server
function ajaxCalled_POSTTest() {
if (ajaxPOSTTestRequest.readyState == 4) {
document.getElementById("output").innerHTML = ajaxPOSTTestRequest.responseText;
}
}
</script>
</head>
<body>
<button onclick="ajaxPOSTTest()">ajax POST Test</button>
<div id="output"></div>
</body>
</html>
ajaxPOST.php:
<?php
$lorem=$_POST['lorem'];
print $lorem.'<br>';
?>
Я просто отправил без проблем более 12000 символов.
У меня есть простой обходной путь.
Предположим, в вашем URI stringdata
слишком длинная строка . Вы можете просто разбить его на несколько частей в зависимости от ограничений вашего сервера. Затем отправьте первый, в моем случае для записи файла. Затем отправьте следующие для добавления к ранее добавленным данным.
Я получил эту ошибку после использования $ .getJSON () из JQuery. Я просто изменил сообщение:
data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
.done(function (response) {
if (response instanceof Object)
var json = response;
else
var json = $.parseJSON(response);
// console.log(response);
// console.log(json);
jsonToDom(json);
if (json.reload != undefined && json.reload)
location.reload();
$("body").delay(1000).css("cursor", "default");
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
alert("Fehler!");
});
Выдержка из RFC 2616: Протокол передачи гипертекста - HTTP / 1.1 :
POST используется для запроса, чтобы исходный сервер принял объект, заключенный в запросе, как новый подчиненный ресурс, идентифицированный Request-URI в строке запроса. POST разработан, чтобы позволить единообразному методу охватывать следующие функции:
- Аннотация существующих ресурсов;
- Размещение сообщения на доске объявлений, в группе новостей, в списке рассылки или в аналогичной группе статей;
- Предоставление блока данных, например результата отправки формы, процессу обработки данных ;
- Расширение базы данных с помощью операции добавления.