रहस्यमय रूप से खाली $ _POST सरणी


21

मेरे पास निम्न HTML / PHP पृष्ठ है:

<?php
if(empty($_SERVER['CONTENT_TYPE'])) {
    $type = "application/x-www-form-urlencoded";
    $_SERVER['CONTENT_TYPE'] = $type;
}

echo "<pre>";
var_dump($_POST);
var_dump(file_get_contents("php://input"));
echo "</pre>";
?>

<form method="post" action="test.php">
<input type="text" name="test[1]" />
<input type="text" name="test[2]" />
<input type="text" name="test[3]" />
<input type="submit" name="action" value="Go" />
</form>

जैसा कि आप देख सकते हैं, फॉर्म सबमिट होगा और अपेक्षित आउटपुट एक पोस्ट सरणी है जिसमें एक एरे है जिसमें वैल्यू भरी हुई है और वैल्यू "गो" (बटन) के साथ एक एंट्री "एक्शन" है। हालांकि, कोई फर्क नहीं पड़ता कि मैं खेतों में किन मूल्यों में प्रवेश करता हूं; परिणाम हमेशा होता है:

array(2) {
  ["test"]=>
  string(0) ""
  ["action"]=>
  string(2) "Go"
}
string(16) "test=&action=Go&"

किसी भी तरह, परीक्षण नाम का सरणी खाली कर दिया जाता है, "एक्शन" चर इसे बनाता है।

मैंने यह देखने के लिए फ़ायरफ़ॉक्स के लिए लाइव HTTP हेडर एक्सटेंशन का उपयोग किया है कि क्या पोस्ट फ़ील्ड सबमिट किए जाते हैं, और वे करते हैं। लाइव HTTP हेडर्स से प्रासंगिक जानकारी (टेक्स्टबॉक्स में मान के रूप में भरे गए बी और सी के साथ):

Content-Type: application/x-www-form-urlencoded
Content-Length: 51
test%5B1%5D=a&test%5B2%5D=b&test%5B3%5D=c&action=Go

क्या किसी के पास कोई विचार है कि ऐसा क्यों हो रहा है? मैं इस पर गुस्सा कर रहा हूं, इसने मुझे इतना समय पहले ही दे दिया है ...

अद्यतन करें:

हमने इसे अलग-अलग सर्वरों पर आज़माया है, यह विंडोज़ के बॉक्सों पर काम करता है, जो उबंटू सर्वर पर PHP संस्करण 5.2.4 (सुहोसिन के साथ) पर है, यह नहीं करता है। यहां तक ​​कि यह एक अलग सर्वर पर भी काम करता है, उबंटू के साथ भी और वही पीएचपी वर्जन भी, जिसमें सुहोसिन भी लगा है।

मैंने दो फ़ाइलों को अलग किया है, यह आउटपुट है ( diff php.ini phps.ini):

270c270
< memory_limit = 32M
---
> memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)
415c415
< variables_order = "EGCSP"
---
> variables_order = "EGPCS"
491d490
< include_path = ".:"
1253a1253,1254
> extension=mcrypt.so
>

इस phps.ini में सर्वर से एक है जिस पर यह काम करता है और php.ini चालू है। लगता है जैसे यहाँ कोई समस्या नहीं हैं, है ना?


4
सुहोसिन हो सकता है।
कर्नल श्रापेल

हां, सुहोसिन एक संभावित उम्मीदवार की तरह लगता है
SeanJA

क्या आप कुछ और जानकारी दे सकते हैं? सुहोसिन सर्वर पर स्थापित है, क्या मुझे इसे बंद कर देना चाहिए? क्या मुझे सेटिंग्स बदलनी चाहिए?
rael_kid

3
अगर यह एक साइहोसिन समस्या है, तो यह कोशिश करेंगे। hardened-php.net/suhosin/configuration.html#suhosin.simulation

मैंने सिमुलेशन मोड को चालू करने की कोशिश की। सरणी अभी भी खाली है। मैं लॉग फ़ाइलों को खोजने के लिए प्रतीत नहीं कर सकते हैं ...
rael_kid

जवाबों:


2

क्या यह स्पष्ट सूचकांकों के बिना काम करता है ? प्रयत्न:

<form method="post" action="test.php">
<input type="text" name="test[]" />
<input type="text" name="test[]" />
<input type="text" name="test[]" />
<input type="submit" name="action" value="Go" />
</form>

नहीं, काम भी नहीं करता है।
rael_kid

परीक्षण सरणी के लिए सूचकांकों को सेट न करें - वे
adam

2
ठीक है, मैं उन्हें छोड़ सकता हूं। लेकिन यह मेरी समस्या का समाधान नहीं करता है।
rael_kid

2

संभावित कारणों की एक संख्या है कि पोस्ट सरणी खाली क्यों हो सकती है - संभावना है कि यह मानव / डेवलपर त्रुटि पर वापस आती है। PHP 5.2 से 5.4 में अपग्रेड करते समय मैंने इस सटीक मुद्दे का अनुभव किया, यह सरल था, लेकिन बग को खोजने में समस्या निवारण के घंटे लग गए। हमारे config.php फ़ाइल में हमारे पास $ _POST सरणियों को संसाधित करने के लिए निम्न कथन था:

if (!get_magic_quotes_gpc()) {
    if (isset($_POST)) {
        foreach ($_POST as $key => $value) {
            $_POST[$key] =  trim(addslashes($value));
        }
    }

मैजिक कोट्स एक बार था, और पीएचपी संस्करणों में 5.2 तक ऊपर काम किया गया था, लेकिन 5.2 संस्करण के ऊपर कुछ भी यह प्रक्रिया नहीं करेगा और एक खाली सरणी वापस आ जाती है।

यदि आपने error_reporting()स्विच नहीं किया है तो मेरा सुझाव है कि आप करते हैं और मुझे यकीन है कि आप इस समस्या का निवारण कर पाएंगे।

आपको पदावनत प्रणाली सुविधाओं के लिए भी जांच करनी चाहिए, जैसे " magic_quotes" उनका उपयोग करने के रूप में परिणाम वापस करने में विफल रहता है। आशा है कि ये आपकी मदद करेगा। शुभकामनाएँ। JCS :)


1

PHP के बगट्रैकर में इस या इसी तरह के मुद्दों पर बग रिपोर्ट हैं:

दुर्भाग्य से यह एक समाधान का उल्लेख नहीं करता है, लेकिन आप एक और CONTENT_TYPE या कोई भी सामग्री प्रकार सेट करने का प्रयास नहीं कर सकते।


ये कीड़े समान हैं, लेकिन मेरे समान नहीं हैं। मैंने सामग्री-प्रकार सेट करने का प्रयास किया (जैसा कि आप मेरे मूल उत्तर में कोड स्निपेट में देख सकते हैं)। अगर मैं कोई कंटेंट टाइप सेट नहीं करता तो यह भी काम नहीं करता ...
rael_kid

1

काफी समान समस्या थी। खैर, सबसे पहले मुझे इस पद पर पहुंचने में काफी समय लगा। मेरी समस्या का नाम जानने के लिए, मुझे PHP कंसोल स्थापित करना था, यह पता लगाना कि इसका उपयोग कैसे करना है। उस कोड को डीबग करें जिसके बारे में मुझे कुछ नहीं पता था। समस्या की जड़ में जाओ और अभी भी हैरान हो।

समाधान वास्तव में बहुत सरल था। Chrome में, डेवलपर टूल को पाने के लिए F12 दबाएँ, नेटवर्क चुनें, अपना फ़ॉर्म पोस्ट करने का प्रयास करें। ट्रेस पोस्ट अनुरोध, स्थिति को देखें। यदि इसकी 301 (या 200 के अलावा कुछ भी) - आपको वही सटीक समस्या हो रही है जो मैं हाल तक कर रहा था!

मेरा नया होस्ट प्रदाता http://my_site.com को http://www.my_site.com पर पुनर्निर्देशित कर रहा था, मुझे बस इतना करना था कि मेरे CMS के हिस्से के रूप में कुछ सेटिंग्स बदलनी हैं (आपका अलग हो सकता है लेकिन एक तरह से समान)

$Configuration['BASE_URL'] = 'http://my_site.com'

सेवा मेरे

$Configuration['BASE_URL'] = 'http://www.my_site.com'

और वोइला, जादू और इंद्रधनुष और गेंडा और मेरी साइट आखिरकार काम कर रही है!

आपकी होस्टिंग सेटिंग के साथ PS मेसिंग भी आपकी समस्या का समाधान कर सकती है ... यदि आपकी समस्या मेरे कोर्स के समान है ...


लानत है। पुनर्निर्देशन मेरी समस्या भी थी!
अमन आलम

0

मुझे यकीन नहीं है लेकिन कर रहा हूँ

name="test[1]"

आदि php को भ्रमित कर सकता है। मैं इनपुट नाम बदलकर test_1, test_2 और देखूंगा कि क्या होता है।


7
@haavee: नहीं, पीएचपी का विज्ञापन करता है : इस प्रयोग php.net/manual/en/faq.html.php#faq.html.arrays
Boldewyn

मैंने यह कोशिश की है, इस तरह से चर काम करते हैं, लेकिन वे एक सरणी में नहीं हैं।
rael_kid

@ भावे: नाह, अंकन PHP को भ्रमित नहीं करता है, यह PHP + रूपों का मानक उपयोग है। देखें बोल्ड्यूविन का लिंक। :)

ठीक है धन्यवाद! आज कुछ नया सीखा है।

1
@ आदम: "अपने सरणियों के लिए विशिष्ट कुंजी निर्दिष्ट करना भी संभव है"।

0

बेस PHP में, मैं केवल एक कॉन्फ़िगरेशन विकल्प के बारे में सोच सकता हूं जो इसे तोड़ सकता है, जो है post_max_size, इसलिए यह सुनिश्चित करने के लिए अपने php.ini और संबंधित फ़ाइलों की जांच करें कि यह मान समझदार है और वर्णमाला चरित्र की तरह शून्य या अमान्य मान पर सेट नहीं है ।

सुहोसिन विभिन्न प्रकार की स्थितियों पर पोस्ट चर को ब्लॉक करना संभव बनाता है, जिसमें सरणी लंबाई और चर नाम लंबाई जैसी चीजें शामिल हैं। 'Suhosin' के लिए अपनी php.ini फ़ाइलों को देखें कि क्या कोई सेटिंग्स मौजूद है, विशेष रूप से 'suhosin.post' के साथ शुरू होने वाली कुछ भी। ( उन मापदंडों पर अधिक जानकारी के लिए http://www.hardened-php.net/suhosin/configuration.html#suhosin.post.max_array_depth देखें , जिनके बारे में मैं सोच रहा हूं।)

दुर्भाग्य से, कॉन्फ़िगरेशन में एक प्रमुख स्क्रूअप को छोड़कर जो एक या शून्य के लिए कुछ मूल्य निर्धारित करता है, आपका कोड (और चर) काफी छोटा है कि यह एक लंबे शॉट का कुछ है। यदि वह खाली आता है, तो मेरा अगला सुझाव आपकी अपाचे और पीएचपी कॉन्फिग का बैकअप लेना होगा, अपनी निर्देशिकाओं को संवारना होगा, पैकेजों को शुद्ध करना होगा, फिर से इंस्टॉल करना होगा और कोड को फिर से काम करना बंद करने तक (तब बारी-बारी से, उस सर्वर को अपडेट करना शुरू करना है, तब तक कॉन्फिगर करना शुरू करना चाहिए। यह नॉनफंक्शनिंग सर्वर से कॉन्फिग के साथ काम कर रहा है जब तक कि वे दोनों टूट न जाएं)। चूंकि आपके पास समान-OS-समान-PHP सर्वर सही ढंग से काम कर रहा है, यह लगभग निश्चित रूप से कहीं न कहीं खराबी सर्वर पर एक कॉन्फ़िगरेशन त्रुटि है, लेकिन इसके माध्यम से खोज करने के लिए एक बहुत बड़ी बाधा है।

इससे आरंभ होने से पहले / etc का संस्करण नियंत्रण अत्यधिक अनुशंसित है - एटकीपर पैकेज में देखें। (वास्तव में, मैं इसके उपयोग, अवधि की सिफारिश करता हूं। प्रमुख संन्यासी सेवर, विशेष रूप से एक मशीन पर जहां एक से अधिक लोगों की जड़ पहुंच है।)


मेरा पोस्ट_मैक्स_साइज 8 एम है, मुझे लगता है कि यह पर्याप्त होगा। मेरी php.ini में suhosin के साथ कोई भी प्रविष्टियाँ नहीं हैं, ताकि यह एक समस्या हो सके ... क्या suhosin की अपनी conf-files है?
rael_kid

डिफ़ॉल्ट रूप से नहीं, लेकिन किसी भी PHP मॉड्यूल के लिए सेटिंग्स किसी भी फाइल द्वारा /etc/php5/conf.d में डेबियन सिस्टम पर सेट की जा सकती हैं, और इस प्रकार मैं एक उबंटू सिस्टम भी मानता हूं। जैसा मैंने कहा, यह एक लंबे शॉट का कुछ था। फिर भी, मैं एक काम प्रणाली के खिलाफ प्रत्येक विन्यास फाइल को अलग करके शुरू करूँगा।
जेड

0

जब से मैंने डेबियन "परीक्षण" को "स्थिर" से अपग्रेड किया है, तब से मुझे जगह-जगह सबमिशन फेल्योर हो रहा है। ऐसा प्रतीत होता है कि apache2 या php5 एक ही नाम से सबमिशन में कई आइटम्स को हैंडल नहीं कर रहा है। उदाहरण के लिए; आपके फॉर्म में दो इनपुट नाम "मो" हैं। अतीत में "मो" के लिए मूल्यों में से केवल एक ही इसे बनाता है। अब फॉर्म डुप्लिकेट कुंजी की पहली घटना के बाद सभी डेटा को छोड़ने लगता है। अभी तक यकीन नहीं। फिर भी इसका पता लगाने की कोशिश की जा रही है।


0

सर्वर से php.ini पर कॉपी करने की कोशिश करें जो इस पर काम करता है (हालांकि पहले गैर-काम करने वाले सर्वर की php.ini बैकअप लें)। यदि ऐसा होता है, तो यह वहां कुछ है (शायद वैरिएबल_ऑर्डर, या संभवतः मेमोरी, दोनों की संभावना नहीं है)।


0

कार्रवाई के अलावा किसी अन्य चीज़ के लिए अपना सबमिट बटन नाम बदलने का प्रयास करें। मुझे अतीत में इससे कुछ समस्याएं हुई हैं। 'एक्शन' नाम का एक इनपुट होने से यह समस्या लगती है।


0

निम्नलिखित आपको मदद नहीं करनी चाहिए। यह PHP कॉन्फिगरेशन के बारे में सब कुछ जानता है:

< variables_order = "EGCSP"
---
> variables_order = "EGPCS"

यह एक मुझ पर कूद गया। आपके सुपरग्लोबल्स विभिन्न आदेशों में पंजीकृत हो रहे हैं। यह सिर्फ एक समस्या नहीं होनी चाहिए क्योंकि चूंकि आप उपयोग नहीं कर रहे हैं register_globalsऔर उन पर भरोसा नहीं करते हैं इसलिए यह उस समस्या को बदलने के लिए समस्या नहीं होनी चाहिए जिसमें आदेश चर को संसाधित किया जा रहा है।

लेकिन आपको निश्चित रूप से इसे एक कोशिश देना चाहिए और चर के क्रम को बदलना चाहिए।


0

यहां तक ​​कि ओपी बहुत पुराना है, लेकिन आज मुझे एक समान समस्या का सामना करना पड़ा।

कुछ ही घंटों में लाखों अलग-अलग सामानों की जाँच करने के बाद, अंततः पता चला कि PHP के डिफ़ॉल्ट सेटिंग्स में हमारे cPanel में PHP 5.6.17 संस्करण के लिए अंतिम अपडेट के बाद http का चयन नहीं किया गया था।यहां छवि विवरण दर्ज करें

और इसे चुने जाने के बाद - सामान्य करने के लिए सब कुछ वापस :-)

यहां छवि विवरण दर्ज करें

आशा है कि यह भविष्य के किसी भी पाठक की मदद करेगा


0

अगर यह किसी और की मदद कर सकता है ... मैंने एक समान मुद्दे को ठीक करने के लिए घंटों बिताए और समस्या थी php.ini की अधिकतम_पुष्कर_वार = "1000" की सीमा। Upload_max_filesize, post_max_size और max_input_vars के php.ini मूल्यों की जाँच करना सुनिश्चित करें। एक से अधिक खाली $ _POST सरणी के साथ परिणाम होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.