Tôi đã phát triển một ứng dụng web PHP. Tôi đang đưa ra một tùy chọn cho người dùng để cập nhật nhiều vấn đề cùng một lúc. Khi làm như vậy, đôi khi người dùng gặp phải lỗi này. Có cách nào để tăng chiều dài của URL trong apache không?
Tôi đã phát triển một ứng dụng web PHP. Tôi đang đưa ra một tùy chọn cho người dùng để cập nhật nhiều vấn đề cùng một lúc. Khi làm như vậy, đôi khi người dùng gặp phải lỗi này. Có cách nào để tăng chiều dài của URL trong apache không?
Câu trả lời:
Trong Apache, giới hạn là giá trị có thể định cấu hình LimitRequestLine
,. Thay đổi giá trị này thành giá trị lớn hơn giá trị mặc định là 8190 nếu bạn muốn hỗ trợ URI yêu cầu dài hơn. Giá trị nằm trong /etc/apache2/apache2.conf . Nếu không, hãy thêm một dòng mới ( LimitRequestLine 10000
) bên dưới AccessFileName .htaccess
.
Tuy nhiên, lưu ý rằng nếu bạn thực sự sắp đạt đến giới hạn này, có thể bạn đang lạm dụng GET
từ đầu. Bạn nên sử dụng POST
để truyền loại dữ liệu này - đặc biệt là vì bạn thậm chí thừa nhận rằng bạn đang sử dụng nó để cập nhật giá trị. Nếu bạn kiểm tra liên kết ở trên, bạn sẽ nhận thấy rằng Apache thậm chí còn nói "Trong điều kiện bình thường, giá trị không được thay đổi so với giá trị mặc định."
POST
. Không có gì về việc sử dụng POST ngăn cản bạn điền cùng một biểu mẫu với các trường vừa được đăng, vì vậy tôi không chắc ý của bạn về điều đó.
LimitRequestLine
ở bất kỳ đâu trong tệp httpd.conf của mình, chỉ cần tự thêm dòng vào bất kỳ đâu bạn muốn. Ví dụ:LimitRequestLine 100000
Dựa trên câu trả lời của John, tôi đã thay đổi yêu cầu GET thành yêu cầu ĐĂNG. Nó hoạt động mà không cần phải thay đổi cấu hình máy chủ. Vì vậy, tôi đã tìm cách thực hiện điều này. Các trang sau rất hữu ích:
jQuery Ajax POST ví dụ với PHP (Lưu ý nhận xét dữ liệu đã đăng sanitize) và
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Về cơ bản, sự khác biệt là yêu cầu GET có url và tham số trong một chuỗi và sau đó gửi null:
http.open("GET", url+"?"+params, true);
http.send(null);
trong khi yêu cầu POST gửi url và các tham số trong các lệnh riêng biệt:
http.open("POST", url, true);
http.send(params);
Đây là một ví dụ hoạt động:
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>';
?>
Tôi vừa gửi hơn 12.000 ký tự mà không gặp vấn đề gì.
Tôi có một cách giải quyết đơn giản.
Giả sử URI của bạn có một chuỗi stringdata
quá dài. Bạn có thể chỉ cần chia nó thành một số phần tùy thuộc vào giới hạn của máy chủ của bạn. Sau đó, gửi cái đầu tiên, trong trường hợp của tôi để viết một tệp. Sau đó, gửi những cái tiếp theo để thêm vào dữ liệu đã thêm trước đó.
Tôi gặp lỗi này sau khi sử dụng $ .getJSON () từ JQuery. Tôi vừa đổi thành bài:
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!");
});
Một đoạn trích từ RFC 2616: Giao thức truyền siêu văn bản - HTTP / 1.1 :
Các POST phương pháp được sử dụng để yêu cầu rằng các máy chủ gốc chấp nhận các thực thể khép kín trong yêu cầu như một cấp dưới mới của tài nguyên được xác định bởi Yêu cầu-URI trong Request-Line. POST được thiết kế để cho phép một phương pháp thống nhất bao gồm các chức năng sau:
- Chú thích các nguồn hiện có;
- Đăng tin nhắn lên bảng thông báo, nhóm tin, danh sách gửi thư hoặc nhóm bài báo tương tự;
- Cung cấp một khối dữ liệu, chẳng hạn như kết quả của việc gửi biểu mẫu, cho quy trình xử lý dữ liệu ;
- Mở rộng cơ sở dữ liệu thông qua hoạt động nối thêm.