রহস্যজনকভাবে খালি $ _POST অ্যারে


21

আমার নিম্নলিখিত HTML / পিএইচপি পৃষ্ঠা রয়েছে:

<?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>

আপনি দেখতে পাচ্ছেন, ফর্মটি জমা দেওয়া হবে এবং প্রত্যাশিত আউটপুটটি একটি পোষ্ট অ্যারে যা এতে একটি অ্যারে রয়েছে যা ভরাট মানগুলিতে এবং "এ" (বোতাম) মান সহ একটি প্রবেশিকা "ক্রিয়া" যুক্ত থাকে containing যাইহোক, আমি ক্ষেত্রগুলিতে কোন মান লিখি না কেন; ফলাফল সর্বদা:

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

একরকম, অ্যারে নামের টেস্টটি খালি করা হয়, "ক্রিয়া" পরিবর্তনশীল এটির মাধ্যমে তৈরি করে।

আমি ফায়ারফক্সের জন্য লাইভ এইচটিটিপি শিরোনাম এক্সটেনশনটি ব্যবহার করেছি যাতে পোষ্টের ক্ষেত্রগুলি জমা দেওয়া হয় এবং তা হয় তা পরীক্ষা করে দেখুন। লাইভ এইচটিটিপি শিরোনামের প্রাসঙ্গিক তথ্য (একটি, খ এবং সি পাঠ্যবক্সগুলিতে মান হিসাবে পূরণ করা হয়েছে):

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

কেন এমন হচ্ছে সে সম্পর্কে কারও কি ধারণা আছে? আমি এটিকে প্রকাশ করছি, ইতিমধ্যে আমার এত বেশি সময় ব্যয় করেছে ...

হালনাগাদ:

আমরা এটি বিভিন্ন সার্ভারে চেষ্টা করেছি, উইন্ডোজ বাক্সে এটি কাজ করে, উবুন্টু সার্ভারে পিএইচপি সংস্করণ 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
সুহসিন হতে পারে।
কর্নেল শ্র্যাপেল

হ্যাঁ,
সুহসিন

আপনি আরও কিছু তথ্য দিতে পারেন? সুহসিন সার্ভারে ইনস্টল করা আছে, আমি কি এটি বন্ধ করব? আমার কি সেটিংস পরিবর্তন করা উচিত?
রায়েল_কিড

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

জগাখিচুড়ি তারা পোষ্ট পরিবর্তনশীল সনাক্তকরণ - পরীক্ষা অ্যারের জন্য সূচকের সেট করবেন না
আদম

2
ঠিক আছে, আমি তাদের ছেড়ে যেতে পারি। তবে এটি আমার সমস্যার সমাধান করে না।
rael_kid

2

পোস্ট অ্যারেটি খালি থাকতে পারে তার বেশ কয়েকটি সম্ভাব্য কারণ রয়েছে - সম্ভাবনা রয়েছে যে এটি মানব / বিকাশকারী ত্রুটিতে ফিরে আসে। আমি এই সঠিক সমস্যাটি পিএইচপি 5.2 থেকে 5.4 থেকে আপগ্রেড করার সময় অভিজ্ঞতা অর্জন করেছি, এটি সহজ ছিল তবে বাগটি খুঁজে পেতে সমস্যা সমাধানের কয়েক ঘন্টা সময় নেয়। আমাদের কনফিগারেশন.এফপি ফাইলটিতে আমাদের $ _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()স্যুইচ না করে থাকেন তবে আমি আপনাকে পরামর্শ দিই এবং আমি নিশ্চিত আপনি সমস্যাটি সমাধান করতে সক্ষম হবেন I'm

আপনার অবচিত সিস্টেম বৈশিষ্ট্যগুলির জন্যও পরীক্ষা করা উচিত, যেমন " magic_quotes" এগুলি ব্যবহার করার ফলে ফলাফলগুলি ফিরে আসতে ব্যর্থ হয়। আশা করি এটা কাজে লাগবে. ভাগ্য সুপ্রসন্ন হোক. জে সি এস :)


1

পিএইচপি এর বাগট্র্যাকারে এই বা অনুরূপ ইস্যুতে বাগ রিপোর্ট রয়েছে:

দুর্ভাগ্যক্রমে এটি কোনও সমাধানের কথা উল্লেখ করে না, তবে আপনি অন্য কোনও CONTENT_TYPE বা কোনও সামগ্রীর প্রকার সেট করার চেষ্টা করতে পারেন।


এই বাগগুলি সমান, তবে আমার মতো নয়। আমি কন্টেন্ট-টাইপ সেট করার চেষ্টা করেছি (যেমন আপনি আমার মূল উত্তরে কোড স্নিপেটে দেখতে পারেন)। যদি আমি কোনও বিষয়বস্তু প্রকার সেট না করে এটিও কাজ করে না ...
rael_kid

1

বেশ অনুরূপ সমস্যা ছিল। ঠিক আছে, সবার আগে আমার এই পোস্টটিতে যেতে বেশ খানিকটা সময় লেগেছিল। আমার সমস্যার নামটি বের করার জন্য, আমাকে পিএইচপি কনসোল ইনস্টল করতে হয়েছিল, কীভাবে এটি ব্যবহার করতে হবে তা নির্ধারণ করুন। কোডটি ডিবাগ করুন যা সম্পর্কে আমি কিছুই জানতাম না। সমস্যার মূলে যান এবং এখনও বিস্মিত হন।

সমাধানটি আসলে বেশ সহজ ছিল। ক্রোমে, বিকাশকারী সরঞ্জামগুলিতে যেতে F12 টিপুন, নেটওয়ার্ক নির্বাচন করুন, আপনার ফর্ম পোস্ট করার চেষ্টা করুন। পোস্ট অনুরোধ ট্রেস, অবস্থা দেখুন। যদি এটির 301 (বা 200 ব্যতীত অন্য কোনও কিছু) - আপনি একইরকম সমস্যায় পড়ে যাচ্ছেন যে আমি সম্প্রতি অবধি যাচ্ছিলাম!

আমার নতুন হোস্ট প্রোভাইডারটি http://my_site.com কে http://www.my_site.com এ পুনঃনির্দেশ করছিল , আমাকে যা করতে হয়েছিল তা হ'ল আমার সিএমএসের অংশ হিসাবে কিছু সেটিংস পরিবর্তন করা (আপনার পদ্ধতি একরকমভাবে ভিন্ন তবে একই রকম হতে পারে) থেকে

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

থেকে

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

এবং ভয়েলা, যাদু এবং রংধনু এবং ইউনিকর্নস এবং আমার সাইটটি অবশেষে কাজ করছে!

আপনার হোস্টিং সেটিংসের সাথে পিএস মেসিং আপনার সমস্যাটিও সমাধান করতে পারে ... যদি আপনার সমস্যাটি অবশ্যই আমার মতো হয় ...


ধুর! ছাই. পুনঃনির্দেশ আমার সমস্যাও ছিল!
আমান আলম

0

আমি নিশ্চিত না কিন্তু করছি

name="test[1]"

ইত্যাদি পিএইচপি বিভ্রান্ত করতে পারে। আমি ইনপুট নামগুলি টেস্ট_1, টেস্ট_2 এ পরিবর্তন করব এবং কী ঘটে তা দেখতাম।


7
@ হাভী: না, পিএইচপি এই ব্যবহারের বিজ্ঞাপন দেয় : পিএইচপিএন
ম্যানুয়াল

আমি এটি চেষ্টা করেছি, সেভাবে চলকগুলি কাজ করে তবে তারা কোনও অ্যারেতে নেই in
রায়েল_কিড

@ হাভি: না, স্বরলিপিটি পিএইচপিগুলিকে বিভ্রান্ত করে না, এটি পিএইচপি + ফর্মগুলির স্ট্যান্ডার্ড ব্যবহার। বোল্ডউইনের লিঙ্কটি দেখুন। :)

ঠিক আছে, ধন্যবাদ! আজ নতুন কিছু শিখেছি।

1
@ অ্যাডাম: "আপনার অ্যারেগুলিতে নির্দিষ্ট কীগুলি নির্ধারণ করাও সম্ভব" "

0

পিএইচপি বেসে, আমি কেবলমাত্র একটি কনফিগারেশন বিকল্পের কথা ভাবতে পারি যা এটি ভেঙে যেতে পারে, যা post_max_sizeএই মানটি বুদ্ধিমান এবং শূন্যতে সেট না করা আছে কিনা তা নিশ্চিত করার জন্য আপনার php.ini এবং সম্পর্কিত ফাইলগুলি পরীক্ষা করুন বা বর্ণমালার অক্ষরের মতো একটি অবৈধ মান ।

সুহসিন অ্যারে দৈর্ঘ্য এবং ভেরিয়েবলের নাম দৈর্ঘ্যের মতো জিনিসগুলি সহ বিভিন্ন শর্তে পোস্ট ভেরিয়েবলগুলি ব্লক করা সম্ভব করে। 'Suhosin' এর জন্য আপনার php.ini ফাইলগুলি গ্রেপ করুন কোনও সেটিংস উপস্থিত রয়েছে কিনা তা দেখতে, বিশেষত 'suhosin.post' দিয়ে শুরু করা কিছু। ( আমি যে প্যারামিটারগুলির বিষয়ে ভাবছি তার আরও বিশদ জানতে http://www.hardened-php.net/suhosin/configration.html#suhosin.post.max_array_dthth দেখুন )

দুর্ভাগ্যক্রমে, কনফিগারেশনে একটি বড় স্ক্রুআপ ব্যতীত যা এক বা শূন্যের জন্য কিছু মান সেট করে, আপনার কোড (এবং ভেরিয়েবল) যথেষ্ট সংক্ষিপ্ত যে এটি একটি দীর্ঘ শট। যদি এটি ফাঁকা হয়ে আসে, আমার পরবর্তী পরামর্শটি হ'ল আপনার অ্যাপাচি এবং পিএইচপি কনফিগারেশনগুলি ব্যাকআপ করা, তাদের ডিরেক্টরিগুলি নাক করা, প্যাকেজগুলি পরিষ্কার করা, পুনরায় ইনস্টল করা এবং কোডটি আবার কাজ করা বন্ধ না হওয়া পর্যন্ত কনফিগার খণ্ডগুলি পুনরায় স্থাপন করা শুরু করুন (পর্যায়ক্রমে, সেই সার্ভারটি আপডেট করা শুরু করুন) এটি উভয় ভাঙ্গা না হওয়া অবধি অবিচ্ছিন্ন সার্ভার থেকে কনফিগারেশন নিয়ে কাজ করছে)। যেহেতু আপনার কাছে একই-ওএস-একই-পিএইচপি সার্ভারটি সঠিকভাবে কাজ করছে, এটি সম্ভবত কোথাও ত্রুটিযুক্ত সার্ভারে একটি কনফিগারেশন ত্রুটি, তবে এটি অনুসন্ধান করার জন্য এটি বেশ বড় একটি খড়খড়ি।

আপনি এটি শুরু করার আগে / ইত্যাদি সংস্করণ নিয়ন্ত্রণের সুপারিশ করা হয় - অ্যাডকিপার প্যাকেজটি দেখুন। (প্রকৃতপক্ষে, আমি এর ব্যবহারের সময়কালের পরামর্শ দিচ্ছি Major


আমার পোস্ট_ম্যাক্স_ সাইজটি 8M, আমি মনে করি এটি যথেষ্ট হবে। আমার php.ini এর মধ্যে সুসোসিনের সাথে কোনও এন্ট্রি নেই, যাতে সমস্যা হতে পারে ... সুহসিনের কি নিজস্ব কনফ-ফাইল রয়েছে?
rael_kid

ডিফল্টরূপে নয়, তবে কোনও পিএইচপি মডিউলের জন্য সেটিংস একটি ডেবিয়ান সিস্টেমে /etc/php5/conf.d এ যে কোনও ফাইল দ্বারা সেট করা যেতে পারে, এবং এইভাবে আমি একটি উবুন্টু সিস্টেমও অনুমান করি। যেমন আমি বলেছিলাম, এটি একটি দীর্ঘ শট ছিল। তবুও, আমি প্রতিটি কনফিগারেশন ফাইলকে একটি ওয়ার্কিং সিস্টেমের সাথে পৃথক করে শুরু করব।
জেড

0

আমি "স্থিতিশীল" থেকে ডেবিয়ান "টেস্টিং" এ আপগ্রেড করার পরে আমি পুরো জায়গা জুড়ে ফর্ম জমা দেওয়ার ব্যর্থতাগুলি পাচ্ছি। দেখা যাচ্ছে যে অ্যাপাচি 2 বা পিএইচপি 5 একই নাম দিয়ে জমা দেওয়ার ক্ষেত্রে একাধিক আইটেম পরিচালনা করছে না। উদাহরণ স্বরূপ; আপনার ফর্মটির দুটি ইনপুট নাম রয়েছে "মো"। অতীতে কেবলমাত্র "মো" এর মানগুলির মধ্যে একটি এটির মাধ্যমে ঘটত। এখন ডুপ্লিকেট কীটির প্রথম উপস্থিতির পরে ফর্মটি সমস্ত ডেটা ফেলেছে। এখনো নিশ্চিত না. এখনও এটা চিন্তা করার চেষ্টা করছে।


0

এই সার্ভার থেকে php.ini- র অনুলিপি করার চেষ্টা করুন যা এইটির সাথে কাজ করে (যদিও প্রথমে কর্মহীন সার্ভারের php.ini ব্যাকআপ করুন)। যদি এটি হয় তবে এটি সেখানে কিছু (সম্ভবত ভেরিয়েবল_র্ডার, অথবা সম্ভবত মেমরি, উভয়ই অসম্ভব)।


0

ক্রিয়া ব্যতীত অন্য কিছুতে আপনার জমা বোতামটির নাম পরিবর্তন করার চেষ্টা করুন। অতীতে এর সাথে আমার কিছু সমস্যা হয়েছিল। 'অ্যাকশন' নামের একটি ইনপুট থাকা সমস্যা বলে মনে হচ্ছে।


0

নিম্নলিখিত আপনাকে সাহায্য না করা উচিত। এটি পিএইচপি কনফিগারেশন সম্পর্কে আমার জানা সমস্ত বিপরীতে দাঁড়িয়েছে:

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

এই আমার উপর লাফিয়ে। আপনার সুপারগ্লোবালগুলি বিভিন্ন ক্রমে নিবন্ধিত হচ্ছে। এটি কেবল কোনও সমস্যা হওয়া উচিত নয় কারণ যেহেতু আপনি ব্যবহার করছেন না register_globalsএবং তাদের উপর নির্ভর করছেন না ক্রমটি পরিবর্তন করতে সমস্যা হওয়া উচিত নয় যাতে ক্রমটি পরিবর্তনশীল প্রক্রিয়াজাত করা হচ্ছে।

তবে আপনাকে অবশ্যই এটির চেষ্টা করতে হবে এবং ভেরিয়েবলের ক্রম পরিবর্তন করতে হবে।


0

এমনকি ওপিটি বেশ পুরানো তবে আজ আমিও একই ধরণের সমস্যার মুখোমুখি হয়েছি।

কয়েক মিলিয়ন বিভিন্ন জিনিস বার বার পরীক্ষা করে ব্যয় করার পরে অবশেষে জানতে পেরেছিলাম যে পিএইচপি ডিফল্ট সেটিংসে আমাদের সিপ্যানেলে পিএইচপি 5.6.17 সংস্করণে সর্বশেষ আপডেটের পরে এইচটিপি নির্বাচন করা হয়নি।এখানে চিত্র বর্ণনা লিখুন

এবং এটি নির্বাচিততে সেট করার পরে - সবকিছু স্বাভাবিক অবস্থায় ফিরে আসে :-)

এখানে চিত্র বর্ণনা লিখুন

আশা করি এটি ভবিষ্যতের যে কোনও পাঠককে সহায়তা করবে


0

এটি যদি অন্য কাউকে সহায়তা করতে পারে ... আমি কেবল একই সমস্যাটি সমাধান করতে কয়েক ঘন্টা ব্যয় করেছি এবং সমস্যাটি ছিল php.ini এর সর্বাধিক_ইনপুট_ভারস = "1000" সীমা। আপলোড_ম্যাক্স_ফাইলেসাইজ, পোস্ট_ম্যাক্স_সাইজ এবং ম্যাক্স ইনপুট_ভার্সের php.ini মানগুলি পরীক্ষা করে দেখতে ভুলবেন না। একের বেশি হলে খালি _P _POST অ্যারে ফলাফল হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.