दुर्भाग्य से, @EatOng द्वारा यहाँ यह उत्तर सही नहीं है । उनके जवाब को पढ़ने के बाद मैंने हर AJAX अनुरोध में एक डमी वैरिएबल जोड़ा जो मैं फायर कर रहा था (भले ही उनमें से कुछ के पास पहले से ही कुछ क्षेत्र थे) बस यह सुनिश्चित करने के लिए कि त्रुटि कभी प्रकट न हो।
लेकिन अभी मैं PHP से एक ही लानत त्रुटि के पार आया था। मैंने दोहरे पुष्टि की कि मैंने कुछ POST डेटा (कुछ अन्य फ़ील्ड भी डमी चर के साथ) भेजे थे। PHP संस्करण 5.6.25
, always_populate_raw_post_data
मान पर सेट है 0
।
इसके अलावा, जैसा कि मैं एक application/json
अनुरोध भेज रहा हूं , PHP इसे करने के लिए $_POST
आबाद नहीं कर रहा है, बल्कि मुझे json_decode()
कच्चे POST अनुरोध निकाय द्वारा सुलभ हैं php://input
।
@ Rr-cites द्वारा उत्तर के रूप में,
0 / ऑफ / जो भी: बीसी व्यवहार (पॉपुलेट -पंजीकृत नहीं है या अनुरोध विधि POST के अलावा अन्य है )।
क्योंकि अनुरोध विधि निश्चित POST के लिए है, मुझे लगता है कि PHP मेरे Content-Type: application/json
अनुरोध (फिर, क्यों ??) को नहीं पहचानता / पसंद नहीं करता था ।
विकल्प 1:
php.ini
फ़ाइल को मैन्युअल रूप से संपादित करें और अपराधी चर को सेट करें -1
, जैसा कि यहां दिए गए कई उत्तर सुझाते हैं।
विकल्प 2:
यह एक PHP 5.6 बग है। PHP अपग्रेड करें।
विकल्प 3:
जैसा कि @ user9541305 ने यहाँ उत्तर दिया है, Content-Type
AJAX के अनुरोध को बदलने application/x-www-form-urlencoded
या multipart/form-data
PHP $_POST
को पोस्ट किए गए शरीर से पॉप्युलेट करेगा (क्योंकि PHP उन content-type
हेडर को पहचानता / पहचानता है !?)।
विकल्प 4: अंतिम परिणाम
खैर, मैं Content-Type
AJAX को बदलना नहीं चाहता था , इससे डिबगिंग के लिए बहुत परेशानी होगी। (क्रोम DevTools अच्छी तरह से JSON अनुरोधों के पोस्ट किए गए चर को देखता है।)
मैं एक ग्राहक के लिए यह बात विकसित कर रहा हूं और उन्हें नवीनतम PHP का उपयोग करने के लिए नहीं कह सकता, न ही php.ini फ़ाइल को संपादित करने के लिए। अंतिम उपाय के रूप में, मैं अभी जाँच करूँगा कि क्या यह सेट है 0
और यदि ऐसा है, तो php.ini
फ़ाइल को अपनी PHP स्क्रिप्ट में ही संपादित करें । बेशक, मुझे उपयोगकर्ता को अपाचे को फिर से शुरू करने के लिए कहना होगा। कितनी शर्म की बात है!
यहाँ एक नमूना कोड है:
<?php
if(ini_get('always_populate_raw_post_data') != '-1')
{
// Get the path to php.ini file
$iniFilePath = php_ini_loaded_file();
// Get the php.ini file content
$iniContent = file_get_contents($iniFilePath);
// Un-comment (if commented) always_populate_raw_post_data line, and set its value to -1
$iniContent = preg_replace('~^\s*;?\s*always_populate_raw_post_data\s*=\s*.*$~im', 'always_populate_raw_post_data = -1', $iniContent);
// Write the content back to the php.ini file
file_put_contents($iniFilePath, $iniContent);
// Exit the php script here
// Also, write some response here to notify the user and ask to restart Apache / WAMP / Whatever.
exit;
}