ফাইল_জেট_কন্টেন্টস ("পিএইচপি: // ইনপুট") বা $ HTTP_RAW_POST_DATA, কোনটি JSON অনুরোধের বডি পাওয়ার জন্য ভাল?


120

file_get_contents("php://input")বা $HTTP_RAW_POST_DATA- জেএসএন অনুরোধের শরীর পেতে কোনটি ভাল?

এবং কোন অনুরোধের ধরণের ( GETবা POST) ক্লায়েন্ট সাইড ব্যবহার করার সময় আমার জেএসএন ডেটা প্রেরণ করা উচিত XmlHTTPRequest?

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

উত্তর থেকে উদ্ধৃতি:

একটি প্রোটোকল দৃষ্টিকোণ file_get_contents("php://input")থেকে আসলে আরও সঠিক, যেহেতু আপনি যে কোনও উপায়ে http মাল্টিপার্ট ফর্ম ডেটা প্রক্রিয়া করছেন না।

উত্তর:


195

আসলে php://inputআপনাকে কাঁচা পোস্টের ডেটা পড়তে দেয়।

এটি $ HTTP_RAW_POST_DATA এর কম মেমরি নিবিড় বিকল্প এবং এর জন্য কোনও বিশেষ php.ini নির্দেশের দরকার নেই

php://inputসঙ্গে পাওয়া যায় না enctype="multipart/form-data"

তথ্যসূত্র: http://php.net/manual/en/wrappers.php.php


12
তদতিরিক্ত, পিএইচপি 5.6 হিসাবে, $HTTP_RAW_POST_DATAঅবচিত বলে বিবেচিত হয় এবং php://inputএটি পুনরায় ব্যবহার করা যেতে পারে।
ক্রিস ফোরেন্স

এছাড়াও দেখুন enable_post_data_reading
পেসিয়ার

json_decode (ফাইল_জেট_কন্টেন্টস ('পিএইচপি: // ইনপুট'), সত্য) কি ইউআরএল থেকে G _GET মান পেতে পিএইচপি 7.1 এ সমর্থন করে?
কৈলাস

$ এইচটিটিপি_আরডাব্লু_পোসT_ ডেটা পিএইচপি 7 হিসাবে অবহিত করা হয়েছে
ড্যানিয়েল

15

পিএইচপি: // ইনপুট একটি পঠনযোগ্য স্ট্রিম যা আপনাকে অনুরোধের বডি থেকে কাঁচা ডেটা পড়তে দেয়। পোষ্ট অনুরোধগুলির ক্ষেত্রে, ph HTTP_RAW_POST_DATA- র পরিবর্তে php: // ইনপুট ব্যবহার করা ভাল। কারণ এটি বিশেষ php.ini নির্দেশিকার উপর নির্ভর করে না । তদুপরি, সেই ক্ষেত্রে যেখানে RA HTTP_RAW_POST_Data ডিফল্টরূপে জনবহুল হয় না, এটি সর্বদা_ জনসমক্ষে_আর_পোস্ট_ডাটা সক্রিয় করার একটি সম্ভাব্য কম মেমরি নিবিড় বিকল্প।

সূত্র: http://php.net/manual/en/wrappers.php.php


4
তদতিরিক্ত, পিএইচপি 5.6 হিসাবে, $HTTP_RAW_POST_DATAঅবচিত বলে বিবেচিত হয় এবং php://inputএটি পুনরায় ব্যবহার করা যেতে পারে।
ক্রিস ফোরেন্স

14

ফাইল_জেট_কন্টেন্টস (পিএইচপি: // ইনপুট) - কাঁচা পিওএসটি ডেটা পায় এবং আপনি যখন এপিআই লিখবেন এবং এক্সএমএল / জেএসএন / ... ইনপুট প্রয়োজন যা পিএইচপি দ্বারা dec _POST এ ডিকোড করা যায় না তখন আপনার এটি ব্যবহার করতে হবে :

পোস্ট JSON স্ট্রিং দ্বারা প্রেরণ

<input type="button" value= "click" onclick="fn()">
<script>
 function fn(){


    var js_obj = {plugin: 'jquery-json', version: 2.3};

    var encoded = JSON.stringify( js_obj );

var data= encoded


    $.ajax({
  type: "POST",
  url: '1.php',
  data: data,
  success: function(data){
    console.log(data);
  }

});

    }
</script>

1.php

//print_r($_POST); //empty!!! don't work ... 
var_dump( file_get_contents('php://input'));

3

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

সার্ভার-সাইড, কাঁচা ইনপুটটি ব্যবহার করার কোনও কারণ নেই, যদি না আপনি একসাথে পুরো পোস্টটি দখল করতে / ডেটা ব্লক পেতে চান। যথারীতি _GET / _POST অ্যারেগুলির মাধ্যমে আপনি যে নির্দিষ্ট তথ্যটি চান তা পুনরুদ্ধার করতে পারেন। MooTools / jQuery এর মতো AJAX গ্রন্থাগারগুলি আপনার জন্য উপযুক্ত ফর্ম্যাটে প্রকৃত AJAX কলগুলি এবং এনকোডিং ফর্ম ডেটা করার শক্ত অংশটি পরিচালনা করবে।


এটি হ'ল: আমি পুরো পোস্টটি দখল করতে / একযোগে ডেটা ব্লক পেতে চাই, কারণ জেএসএন একটি পরিবর্তনশীল-কম ফর্ম্যাট, এটি কেবল ডেটা উপস্থাপন করে।
ম্যানুয়েল বিট্টো

@ কুসবে আমি দেখতে পাচ্ছি না কেন এটি প্রয়োজনীয়, কেন জেএসওএন ডেটা পোষ্ট ফিল্ডে রাখেনি এবং এটি দিয়ে করা হবে?
পেক্কা

আপনি যদি পুরো JSON ব্লকটি চান, তবে কেন JSON টেক্সট ব্লকটি কোনও ফর্ম ফিল্ডে বরাদ্দ করবেন না এবং এটির মতো জমা দিচ্ছেন না কেন? <input type="hidden" name="data" value="json data here" />সম্পূর্ণরূপে গ্রহণযোগ্য এবং আপনাকে এটিকে $ _REQUEST ['ডেটা'] দিয়ে তুচ্ছ সার্ভার-সাইড পুনরুদ্ধার করতে দেয়।
মার্ক বি

3
কোনও পোষ্ট ক্ষেত্রে জেএসএনকে এম্বেড করা এইচটিটিপি কনটেন্ট-টাইপ ট্যাগের উদ্দেশ্যকে পরাস্ত করে, এবং ফিডলার এবং ব্রাউজার ডিবাগারগুলিতে (যা জেএসএন বুঝতে পারে) ডিবাগিংয়ের পক্ষে ততটা সুন্দর নয়। এছাড়াও, অনেকগুলি তৃতীয় পক্ষের জাভাস্ক্রিপ্ট লাইব্রেরি অ্যাপ্লিকেশন / জসন হিসাবে জেএসএন পে-লোড পোস্ট করে।
সাইবারমঙ্ক

2

জেএসন ডেটার জন্য, এটি "অ্যাপ্লিকেশন / জেসন" বিষয়বস্তুর ধরণ হিসাবে পোস্ট করা আরও সহজ। যদি আপনি জিইটি ব্যবহার করেন, আপনাকে জেএসএনকে একটি প্যারামিটারে ইউআরএল-এনকোড করতে হবে এবং এটি এক ধরণের অগোছালো। এছাড়াও, আপনি পোষ্ট করার সময় কোনও আকারের সীমা থাকে না। GET এর আকার খুব সীমাবদ্ধ থাকলে (সর্বাধিক 4K)।


2
POST এর জন্য প্রায়শই আকারের সীমা থাকে তবে এটি সাধারণত বেশ উচ্চতর সেট থাকে set আপনার পরীক্ষা করুন php.ini
ব্র্যাড

2

আপনার দ্বিতীয় প্রশ্নটি সহজ, GET এর সার্ভার এবং ব্রাউজার উভয়দিকেই 1-2 কিলোবাইটের আকারের সীমাবদ্ধতা রয়েছে, সুতরাং যে কোনও ধরণের বৃহত পরিমাণে আপনাকে পোষ্টের মাধ্যমে প্রেরণ করতে হবে।

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