আমি একটি পিএইচপি ওয়েব অ্যাপ্লিকেশন তৈরি করেছি। আমি একযোগে একাধিক সমস্যা আপডেট করার জন্য ব্যবহারকারীকে একটি বিকল্প দিচ্ছি। এটি করতে গিয়ে, কখনও কখনও ব্যবহারকারী এই ত্রুটির মুখোমুখি হন। অ্যাপাচে URL এর দৈর্ঘ্য বাড়ানোর কোনও উপায় আছে কি?
আমি একটি পিএইচপি ওয়েব অ্যাপ্লিকেশন তৈরি করেছি। আমি একযোগে একাধিক সমস্যা আপডেট করার জন্য ব্যবহারকারীকে একটি বিকল্প দিচ্ছি। এটি করতে গিয়ে, কখনও কখনও ব্যবহারকারী এই ত্রুটির মুখোমুখি হন। অ্যাপাচে URL এর দৈর্ঘ্য বাড়ানোর কোনও উপায় আছে কি?
উত্তর:
অ্যাপাচে অধীনে, সীমাটি একটি কনফিগারযোগ্য মান LimitRequestLine
,। আপনি যদি দীর্ঘতর অনুরোধ ইউআরআই সমর্থন করতে চান তবে এই মানটিকে 8190 এর ডিফল্টের চেয়ে বড় কিছুতে পরিবর্তন করুন। মানটি /etc/apache2/apache2.conf এ রয়েছে । যদি তা না হয় তবে এর LimitRequestLine 10000
অধীনে একটি নতুন লাইন যুক্ত করুন AccessFileName .htaccess
।
তবে নোট করুন যে আপনি যদি এই সীমাটিতে চলে যান তবে আপনি সম্ভবত এটিকে গালাগাল GET
করছেন। আপনার POST
এই ধরণের ডেটা প্রেরণ করার জন্য ব্যবহার করা উচিত - বিশেষত যেহেতু আপনি স্বীকারও করেন যে আপনি মানগুলি আপডেট করার জন্য এটি ব্যবহার করছেন। যদি আপনি উপরের লিঙ্কটি পরীক্ষা করেন তবে আপনি খেয়াল করবেন যে অ্যাপাচি এমনকি "সাধারণ পরিস্থিতিতে, মানটি ডিফল্ট থেকে পরিবর্তন করা উচিত নয়।"
POST
। POST ব্যবহার সম্পর্কে কিছুই আপনাকে সবেমাত্র পোস্ট করা ক্ষেত্রগুলির সাথে একই ফর্মটি পপ করা থেকে বিরত রাখে না, তাই আপনি এর দ্বারা কী বোঝাতে চাই তা নিশ্চিত নই।
LimitRequestLine
যদি আপনার httpd.conf ফাইলে কোথাও না খুঁজে পান তবে আপনি নিজের পছন্দ মতো লাইনটি নিজেই যুক্ত করুন। উদাহরণস্বরূপ:LimitRequestLine 100000
জন এর উত্তরের ভিত্তিতে, আমি জিইটি অনুরোধটিকে একটি পোস্টের অনুরোধে পরিবর্তন করেছি। এটি সার্ভার কনফিগারেশন পরিবর্তন না করেই কাজ করে। সুতরাং আমি কিভাবে এটি বাস্তবায়ন করতে খুঁজছেন গিয়েছিলাম। নিম্নলিখিত পৃষ্ঠাগুলি সহায়ক ছিল:
পিএইচপি সহ jQuery আজাক্স পোস্টের উদাহরণ (স্যানিটাইজ পোস্ট ডেটা মন্তব্যটি নোট করুন) এবং
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
মূলত, পার্থক্যটি হ'ল জিইটি অনুরোধটির url এবং প্যারামিটারগুলি একটি স্ট্রিংয়ে থাকে এবং তারপরে নালটি প্রেরণ করে:
http.open("GET", url+"?"+params, true);
http.send(null);
যদিও পোষ্ট অনুরোধটি ইউআরএল এবং পরামিতিগুলিকে পৃথক কমান্ডে প্রেরণ করে:
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 টিরও বেশি অক্ষর প্রেরণ করেছি।
আমার একটি সাধারণ কাজ আছে।
মনে করুন আপনার ইউআরআইয়ের একটি স্ট্রিং রয়েছে stringdata
যা খুব দীর্ঘ। আপনার সার্ভারের সীমাবদ্ধতার উপর নির্ভর করে আপনি কেবল এটি বেশ কয়েকটি অংশে বিভক্ত করতে পারেন। তারপরে প্রথম ফাইলটি জমা দিন, আমার ক্ষেত্রে একটি ফাইল লিখুন। তারপরে আগের যুক্ত ডেটা যুক্ত করতে পরবর্তীগুলিকে জমা দিন।
JQuery থেকে get .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!");
});
থেকে একটি উদ্ধৃতাংশ হাইপারটেক্সট ট্রান্সফার প্রোটোকল - HTTP- র / 1.1: জন্য RFC 2616 :
পোস্ট পদ্ধতি অনুরোধ করতে ব্যবহৃত হয় যে মূল সার্ভার সত্তা সংস্থান অনুরোধ-লাইন অনুরোধ-কোনো URI দ্বারা চিহ্নিত একটি নতুন অধীনস্থ যেমন অনুরোধে ঘিরা গ্রহণ। পোষ্টটি একটি অভিন্ন পদ্ধতি নিম্নলিখিত ফাংশনগুলি আবরণ করার জন্য ডিজাইন করা হয়েছে:
- বিদ্যমান সংস্থানসমূহ টিকা;
- বুলেটিন বোর্ড, নিউজ গ্রুপ, মেলিং তালিকা বা অনুরূপ গ্রুপের নিবন্ধগুলিতে বার্তা পোস্ট করা;
- ডেটা হ্যান্ডলিং প্রক্রিয়াতে কোনও ফর্ম জমা দেওয়ার ফলাফলের মতো ডেটাগুলির একটি ব্লক সরবরাহ করা ;
- অ্যাপেন্ড অপারেশনের মাধ্যমে একটি ডাটাবেস প্রসারিত করা।