मैंने एक PHP वेब ऐप विकसित किया है। मैं उपयोगकर्ता को एक बार में कई मुद्दों को अपडेट करने का विकल्प दे रहा हूं। ऐसा करने में, कभी-कभी उपयोगकर्ता इस त्रुटि का सामना कर रहा है। क्या अपाचे में URL की लैंथ बढ़ाने का कोई तरीका है?
मैंने एक PHP वेब ऐप विकसित किया है। मैं उपयोगकर्ता को एक बार में कई मुद्दों को अपडेट करने का विकल्प दे रहा हूं। ऐसा करने में, कभी-कभी उपयोगकर्ता इस त्रुटि का सामना कर रहा है। क्या अपाचे में URL की लैंथ बढ़ाने का कोई तरीका है?
जवाबों:
अपाचे के तहत, सीमा एक विन्यास योग्य मूल्य है LimitRequestLine
,। यदि आप URI के लंबे अनुरोध का समर्थन करना चाहते हैं, तो इस मान को 8190 के अपने डिफ़ॉल्ट से कुछ बड़ा करें। मान /etc/apache2/apache2.conf में है । यदि नहीं, तो एक नई पंक्ति ( LimitRequestLine 10000
) जोड़ें AccessFileName .htaccess
।
हालांकि, ध्यान दें कि यदि आप वास्तव में इस सीमा में चल रहे हैं, तो आप शायद GET
शुरू करने के लिए दुर्व्यवहार कर रहे हैं । आपको POST
इस तरह के डेटा को प्रसारित करने के लिए उपयोग करना चाहिए - विशेष रूप से तब तक जब आप मान भी लेते हैं कि आप इसका उपयोग मूल्यों को अपडेट करने के लिए कर रहे हैं। यदि आप ऊपर दिए गए लिंक की जांच करते हैं, तो आप देखेंगे कि अपाचे भी कहता है "सामान्य परिस्थितियों में, मान को डिफ़ॉल्ट से नहीं बदला जाना चाहिए।"
POST
। POST का उपयोग करने के बारे में कुछ भी नहीं है जो आपको अभी पोस्ट किए गए फ़ील्ड के साथ उसी फॉर्म को पॉप्युलेट करने से रोकता है, इसलिए मुझे यकीन नहीं है कि आप इसका क्या मतलब है।
LimitRequestLine
अपनी httpd.conf फ़ाइल में कहीं भी शब्द नहीं ढूँढ सकते हैं , तो बस अपने आप को कहीं भी अपनी इच्छानुसार पंक्ति जोड़ें। उदाहरण के लिए:LimitRequestLine 100000
जॉन के जवाब के आधार पर, मैंने GST अनुरोध को POST अनुरोध में बदल दिया। यह सर्वर कॉन्फ़िगरेशन को बदलने के बिना काम करता है। इसलिए मैं देख रहा था कि इसे कैसे लागू किया जाए। निम्नलिखित पृष्ठ सहायक थे:
PHP के साथ jQuery का अजाक्स POST उदाहरण (पोस्ट की गई टिप्पणी को साफ करें) और
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
मूल रूप से, अंतर यह है कि GET अनुरोध में एक स्ट्रिंग में url और पैरामीटर होते हैं और फिर शून्य भेजते हैं:
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
है जो बहुत लंबी है। आप बस अपने सर्वर की सीमा के आधार पर इसे कई हिस्सों में तोड़ सकते हैं। फिर फ़ाइल लिखने के लिए मेरे मामले में पहले एक को जमा करें। फिर पहले वाले डेटा में जोड़ने के लिए अगले लोगों को जमा करें।
JQuery से $ .getJSON () का उपयोग करने के बाद मुझे यह त्रुटि मिली। मैं सिर्फ पोस्ट करने के लिए बदल गया:
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 :
पोस्ट विधि अनुरोध करने के लिए प्रयोग किया जाता है कि मूल सर्वर इकाई संसाधन अनुरोध लाइन में अनुरोध- URI द्वारा की पहचान की एक नई अधीनस्थ के रूप में अनुरोध में संलग्न स्वीकार करते हैं। POST को एक समान विधि को निम्नलिखित कार्यों को कवर करने की अनुमति देने के लिए डिज़ाइन किया गया है:
- मौजूदा संसाधनों की व्याख्या;
- बुलेटिन बोर्ड, समाचार समूह, मेलिंग सूची या लेखों के समान समूह को संदेश पोस्ट करना;
- डेटा का एक ब्लॉक प्रदान करना, जैसे कि डेटा जमा करने की प्रक्रिया के लिए फ़ॉर्म सबमिट करना ;
- एक परिशिष्ट ऑपरेशन के माध्यम से एक डेटाबेस का विस्तार।