ฉันได้พัฒนาเว็บแอป 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
จากคำตอบของ John ฉันเปลี่ยนคำขอ 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>';
?>
ฉันเพิ่งส่งตัวอักษรมากกว่า 12,000 ตัวโดยไม่มีปัญหาใด ๆ
ฉันมีวิธีแก้ปัญหาง่ายๆ
สมมติว่า 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: Hypertext Transfer Protocol - HTTP / 1.1 :
POSTวิธีการที่ใช้ในการขอให้เซิร์ฟเวอร์ต้นทางยอมรับกิจการที่แนบมาในคำขอเป็นผู้ใต้บังคับบัญชาใหม่ของทรัพยากรที่ระบุโดยขอ URI ในคำขอ-Line POST ได้รับการออกแบบมาเพื่อให้วิธีการเดียวกันครอบคลุมฟังก์ชันต่อไปนี้:
- คำอธิบายประกอบของทรัพยากรที่มีอยู่
- การโพสต์ข้อความไปยังกระดานข่าวกลุ่มข่าวสารรายชื่อส่งเมลหรือกลุ่มบทความที่คล้ายกัน
- ให้บล็อกของข้อมูลดังกล่าวเป็นผลมาจากการส่งแบบฟอร์มเพื่อกระบวนการจัดการข้อมูลที่ ;
- การขยายฐานข้อมูลผ่านการดำเนินการผนวก