এইচটিটিপিএসের সাথে কাজ করার জন্য কীভাবে ফাইল_জেট_কন্টেন্টস () পাবেন?


106

আমি ক্রেডিট কার্ড প্রসেসিং সেটআপ করার জন্য কাজ করছি এবং সিআরএল-এর জন্য একটি কার্যনির্বাহী ব্যবহার প্রয়োজন। আমি পরীক্ষার সার্ভারটি ব্যবহার করার সময় নিম্নলিখিত কোডটি ঠিকঠাকভাবে কাজ করেছিল (যা কোনও এসএসএল ইউআরএল কল করে না), কিন্তু এখন আমি যখন এইচটিটিপিএস সহ ওয়ার্কিং সার্ভারে এটি পরীক্ষা করছি, এটি ত্রুটি বার্তাটি ব্যর্থ করে "স্ট্রিমটি খুলতে ব্যর্থ হয়েছে"।

function send($packet, $url) {
  $ctx = stream_context_create(
    array(
      'http'=>array(
        'header'=>"Content-type: application/x-www-form-urlencoded",
        'method'=>'POST',
        'content'=>$packet
      )
    )
  );
  return file_get_contents($url, 0, $ctx);
}

উত্তর:


89

আপনার পিএইচপি স্ক্রিপ্টগুলির জন্য কোনও https মোড়ক পাওয়া যায় কিনা তা দেখতে নীচের স্ক্রিপ্টটি ব্যবহার করে দেখুন।

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_export($w);

আউটপুট মত কিছু হতে হবে

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(11) {
  [...]
}

@ ভোলকার সেজন্য আমি অনুমতি_ইউর_ফোপেনের জন্য জিজ্ঞাসা করেছি
গর্ডন

আচ্ছা যা অদ্ভুত তা হ'ল এটি ওপেনসেল বন্ধ রয়েছে বলে জানিয়েছে, তবে ফিনপোফো () এর মতে এটি এর সাথে সংকলিত হয়েছে, যদি না আমি এটি ভুল দেখছি।
জেমস সিম্পসন

phpinfo () আপনাকে কনফিগার লাইনে তাই বলে বা "ওপেনএসএসএল" নামে একটি পুরো বিভাগ আছে?
ভোলকারক

ঠিক আছে এটি কনফিগার-লাইনে রয়েছে, এটির জন্য কোনও বিভাগ নয়। আমার মনে হয় সমস্যাটা কি?
জেমস সিম্পসন

আমার সব কিছু আছে এবং এটি এখনও কাজ করে না। এবং অনুমতি_আরল_ফোপেন। লোকালহোস্ট থেকে কেবল নন https url কাজ করে।
কার্টিস

116

Https মোড়কের অনুমতি দেওয়ার জন্য:

  • php_opensslএক্সটেনশন থাকা আবশ্যক এবং সক্রিয় করা
  • allow_url_fopen সেট করা আবশ্যক on

Php.ini ফাইলটিতে আপনার এই লাইনগুলি উপস্থিত না থাকলে যুক্ত করা উচিত:

extension=php_openssl.dll

allow_url_fopen = On

উভয়ই আমার ইনস্টলেশনে চালু আছে তবে আমি এখনও এসএসএল ত্রুটি পেয়েছি "সতর্কতা: ফাইল_জেট_কন্টেন্টস (): এসএসএল: হ্যান্ডশেকের সময়সীমা শেষ হয়েছে"
অ্যাডাম্যান্টাস

53

নিম্নলিখিত চেষ্টা করুন।

function getSslPage($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

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


29
ক্রেডিট কার্ড প্রসেসিংয়ের সাথে লেনদেন করার সময় কেন আপনি এসএসএল যাচাইকরণ অক্ষম করবেন?
পিটার

ধন্যবাদ, কৌশলটি এখানে রয়েছে: curl_setopt ((ch, CURLOPT_SSL_VERIFYPEER, FALSE);
ডিলান বি

46
$url= 'https://example.com';

$arrContextOptions=array(
      "ssl"=>array(
            "verify_peer"=>false,
            "verify_peer_name"=>false,
        ),
    );  

$response = file_get_contents($url, false, stream_context_create($arrContextOptions));

এটি আপনাকে এইচটিটিপিএস কিনা তা ইউআরএল থেকে সামগ্রী পেতে অনুমতি দেবে


ধন্যবাদ! এটি আমার শেষের দিকে কাজ করেছে। এফবি ওপেন গ্রাফ এপিআই কল করার চেষ্টা করা হয়েছে :)
ডিকোডিংপান্ডা

আমি কেবল পরীক্ষার উদ্দেশ্যে অবৈধ শংসাপত্রের সাথে আমার একটি ডোমেন অ্যাক্সেস করার চেষ্টা করছিলাম এবং যদিও এটি এসএসএল বৈধতা অক্ষম করে, এটি আমার প্রয়োজন ছিল।
কারলা

গ্রেট! আমি আমার এক্সএএমপিপি পরীক্ষার সাইটে ফাইল_জেট_কন্টেন্টস ব্যবহার করে একটি এয়ারবিএনবি ক্যালেন্ডার ডাউনলোড করার জন্য 5 দিন ধরে চেষ্টা করেছি, এটি সমস্যার সমাধান করেছে, ধন্যবাদ।
জনিবিগড

Https- র মাধ্যমে কোনও বৈধ HTTP শংসাপত্র ছাড়াই ভ্যাগ্র্যান্ট পরীক্ষা বাক্সে সংযোগ স্থাপনের চেষ্টা করার জন্য আমার জন্য কাজ করা। এখানে পিএইচপি এসএসএল প্রসঙ্গ বিকল্পগুলি সেট করা হচ্ছে: php.net/manual/en/context.ssl.php ; যাজক যাচাই করুন = ব্যবহৃত SSL শংসাপত্রের যাচাইকরণের প্রয়োজন; যাচাই_পিয়ার_নাম = পিয়ার নামের যাচাইকরণের প্রয়োজন।
অ্যান্টনি

এটি কি এসএসএল শংসাপত্র ভঙ্গ করছে না এবং এটি একটি সুরক্ষা গর্ত?
ওয়েবচুন

10

এটি সম্ভবত আপনার টার্গেট সার্ভারের একটি বৈধ SSL শংসাপত্র না থাকার কারণে।


অনুরোধ করা সার্ভারের কোনও SSL শংসাপত্রের দরকার নেই need
সেজেজোজ

15
আমি অনুরোধকারী সার্ভারটি বলিনি, আমি লক্ষ্য সার্ভারটি বলেছিলাম।
এমিল ভিক্রাস্টম

2
আমাকে স্কিম শিখিয়ে দেবে। হেহ! আমার ক্ষমা প্রার্থনা করুন এবং upvote দয়া করে।
ceejayoz

লক্ষ্য সার্ভারের একটি বৈধ এসএসএল শংসাপত্র রয়েছে।
জেমস সিম্পসন

@ জেমস, আপনি যদি এর পরিবর্তে সিআরএল এর সাথে সংযোগ স্থাপনের চেষ্টা করেন তবে আপনি কি ত্রুটি পেয়েছেন? নাকি চেষ্টা করা একেবারেই অসম্ভব?
এমিল বিক্রষ্টম

6

আপনার php.ini ফাইলটিতে কেবল দুটি লাইন যুক্ত করুন।

extension=php_openssl.dll

allow_url_include = On

এটা আমার জন্য কাজ করে।


1
আপনার সম্ভবত সম্ভবত allow_url_fopenপ্রশ্নটি ইউআরএল খোলার সাথে যুক্ত নয় opening
shukshin.ivan

5

আমারও ত্রুটি ছিল সেট allow_url_include = Onমধ্যে php.iniএটা আমার জন্য ঠিক করেছি।


5

এইচটিটিপিএস পিএইচপি ৪.৩.০ থেকে শুরু করে সমর্থনযোগ্য, যদি আপনি ওপেনএসএসএল সমর্থন করে সংকলন করেছেন। এছাড়াও, লক্ষ্য করুন যে সার্ভারটির বৈধ শংসাপত্র রয়েছে, ফায়ারওয়াল আউটবাউন্ড সংযোগের অনুমতি দেয় এবং allow_url_fopenphp.ini এ সত্য সেট করা আছে।


আমার ওপেনএসএসএল সমর্থন সহ পিএইচপি 5.2.8 রয়েছে। আমি এটি দিয়ে একই ত্রুটিটি পাচ্ছি, এবং লক্ষ্য সার্ভারটির একটি বৈধ শংসাপত্র রয়েছে।
জেমস সিম্পসন

2
ফায়ারওয়াল কি আউটবাউন্ড https সংযোগগুলির জন্য কনফিগার করা আছে? সাধারণত, ওয়েবসার্ভারটি চলমান https 80 পোর্টে চলবে না '' স্ট্রিমটি খুলতে ব্যর্থ 'ছাড়া ত্রুটির মধ্যে অন্য কিছু আছে কি?
গর্ডন

1
যতদূর আমি এটি জানি, এটি সম্পূর্ণ ত্রুটি: সতর্কতা: fopen (https: // ...) [ফাংশন.ফোন]: স্ট্রিমটি খুলতে ব্যর্থ হয়েছে: / হোম / ইউজার / পাবলিক_এইচটিএমএল / তে কোনও ফাইল বা ডিরেক্টরি নেই No 993 লাইনে test.php
জেমস সিম্পসন

এবং php.ini এ অনুমতি_url_fopen কি সেট করা আছে?
গর্ডন

অদ্ভুত জিনিস. আপনি কি এইচটিটিপি এবং এইচটিটিপিএস ইউআরএল থেকে জিইটি করতে পারেন তা দেখার জন্য? স্ট্রিম প্রসঙ্গ ছাড়া?
গর্ডন

3

আমার ক্ষেত্রে, সমস্যাটি ডাব্লুএএমপি-এর জন্য অ্যাপাচি-এর চেয়ে সিএলআইয়ের জন্য আলাদা php.ini ব্যবহার করার কারণে ছিল, তাই ডাব্লুএএমএপি মেনুতে আপনার সেটিংস সিএলআই-তে প্রযোজ্য নয়। কেবল সিএলআই php.ini পরিবর্তন করুন এবং এটি কাজ করে।


1

কখনও কখনও কোনও সার্ভার HTTP অনুরোধ শিরোনামে (যেমন কোনও উপযুক্ত ব্যবহারকারী এজেন্ট) যা দেখে বা না দেখায় তার ভিত্তিতে প্রতিক্রিয়া না জানানো পছন্দ করে। আপনি যদি কোনও ব্রাউজারের সাথে সংযোগ স্থাপন করতে পারেন তবে এটি পাঠানো শিরোনামগুলি ধরুন এবং আপনার স্ট্রিম প্রসঙ্গে তাদের নকল করুন।


0

আমি আইআইএসে অ ক্রিয়ামূলক https নিয়ে আটকে ছিলাম। এর সাথে সমাধান:

file_get_contents ('https ..) লোড হবে না।

  • https://curl.haxx.se/docs/caextract.html ডাউনলোড করুন
  • .. phpN.N / অতিরিক্ত / এসএসএল এর অধীনে ইনস্টল করুন
  • এর সাথে php.ini সম্পাদনা করুন:

    curl.cainfo = "সি: \ প্রোগ্রাম ফাইল \ পিএইচপি \ v7.3 \ অতিরিক্ত s এসএসএল \ cacert.pem" openssl.cafile = "সি: \ প্রোগ্রাম ফাইলগুলি \ পিএইচপি \ v7.3 \ অতিরিক্ত \ এসএসএল \ cacert.pem"

পরিশেষে!


-1

যদি কোনও ইউআরএল ব্যবহার হয় বা না হয় তবে তা পরীক্ষা করে দেখুন

আপনার প্রশ্নের কোডটি একটি কার্যক্ষম সংস্করণ হিসাবে আবারও লেখা যেতে পারে:

function send($packet=NULL, $url) {
// Do whatever you wanted to do with $packet
// The below two lines of code will let you know if https url is up or not
$command = 'curl -k '.$url;
return exec($command, $output, $retValue);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.