रैपर "https" ढूंढने में असमर्थ - क्या आपने PHP को कॉन्फ़िगर करते समय इसे सक्षम करना भूल गया था?


Answers

मुझे extension=php_openssl.dll xampp/php/php.ini में स्थित मेरी php.ini फ़ाइल में extension=php_openssl.dll जोड़ना पड़ा। किसी भी तरह यह वहां नहीं था, इसे जोड़ने और अपाचे को पुनरारंभ करने के बाद सब कुछ ठीक काम कर रहा था।

Question

समस्या प्रश्न में है। मैंने इसके संबंध में समाधानों की पूरी तरह से जांच की है और मुझे पता है कि इसके लिए विषय हैं और मैंने उनका भी पालन किया है और कुछ भी काम नहीं किया है। ऐसा कहा जा रहा है कि मैंने अभी तक जो कुछ भी किया है, मैं उसे सूचीबद्ध कर दूंगा। मैं अपने विंडोज एक्सपी कंप्यूटर पर नवीनतम ग्रहण संस्करण पर ज़ेंड डीबगिंग के साथ PHP 5.2.14 चला रहा हूं। मेरे पास 1 जीबी रैम है। मेरे पास XachePP अपाचे, MySQL, और FileZilla के साथ चल रहा है।

एक्सएएमपीपी पर मैंने निम्नलिखित किया है (इन परिवर्तनों के दौरान अपाचे बंद था): XAMPP नियंत्रण कक्ष से व्यवस्थापक पर क्लिक किया गया और https:// localhost/xampp/ । वहां से मैंने स्वागत पृष्ठ पर इस लाइन से कर्ट स्वीकार किए हैं:

ओपनएसएसएल समर्थन के लिए कृपया https: // 127.0.0.1 या https: // localhost के साथ परीक्षण प्रमाण पत्र का उपयोग करें।

उसी खंड पर मैंने phpinfo() । 'पर्यावरण' के तहत, SERVER["HTTPS"] on । 'अपाचे पर्यावरण' के तहत, HTTPS On । 'PHP चर के तहत, _SERVER["HTTPS"] On । 'फार' के तहत, OpenSSL support disabled (ext / openssl इंस्टॉल करें)। मुझे नहीं पता कि फारस को कैसे सक्षम किया जाए।

अब फाइलों के बारे में सी: \ xampp में, मैं PHP फ़ोल्डर में गया था। उत्पादन और विकास php.ini फ़ाइलों (माफ की तुलना में बेहतर सुरक्षित) दोनों के तहत, मेरे पास allow_url_fopen=On , allow_url_include=On , और मैंने अर्धविराम हटा दिया है, ताकि extension=php_openssl.dll अब टिप्पणी नहीं की जा सके। मैंने यह भी पुष्टि की कि .dll PHP फ़ोल्डर के ext फ़ोल्डर में है। Libeay32.dll और ssleay32.dll दोनों PHP और अपाचे फ़ोल्डर में हैं। अपाचे फ़ोल्डर में उत्पादक या विकास php.ini फ़ाइलें नहीं होती हैं।

मैं http://www.slproweb.com/products/Win32OpenSSL.html गया हूं और सुरक्षित उपाय के लिए Win32 OpenSSL v1.0.0d स्थापित किया है।

अब मेरे retrieve_website.php में प्रश्न में कोड की रेखा इस तरह दिखती है:

$urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results;
$xmlresults = file_get_contents($urlquery);

मेरे पास दो अन्य वेबसाइटें हैं जो मैं पूछता हूं लेकिन उन्हें HTTP के माध्यम से परोसा जाता है और वे ठीक काम करते हैं। मेरे पास स्क्रिप्ट के अंत के पास कोड की यह पंक्ति भी दर्ज की गई है:

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_dump($w);

जब मैं इसे ग्रहण पर एक PHP स्क्रिप्ट के रूप में चलाता हूं, तो सबकुछ ठीक से आउटपुट करता है जिस तरह से मैं इन परिणामों के साथ चाहता हूं:

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(10) {
  [0]=>
  string(5) "https"
  [1]=>
  string(4) "ftps"
  [2]=>
  string(3) "php"
  [3]=>
  string(4) "file"
  [4]=>
  string(4) "data"
  [5]=>
  string(4) "http"
  [6]=>
  string(3) "ftp"
  [7]=>
  string(13) "compress.zlib"
  [8]=>
  string(14) "compress.bzip2"
  [9]=>
  string(3) "zip"
}

इन सभी परिवर्तनों के बावजूद मैंने (अपाचे शुरू करने के बाद), मुझे अभी भी वही त्रुटियां मिलती हैं जब पहली बार मैं अपनी PHP स्क्रिप्ट को एक्लिप्स और फ़ायरफ़ॉक्स में http://localhost/tutorial/retrieve_website.php माध्यम से एक्सेस करता हूं:

चेतावनी: file_get_contents () [function.file-get-content]: रैपर "https" ढूंढने में असमर्थ - क्या आपने PHP को कॉन्फ़िगर करते समय इसे सक्षम करना भूल गए? सी 2: \ xampp \ htdocs \ tutorial \ retrieve_website.php लाइन 2 पर

चेतावनी: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= हटाए गए एपीआई आईडी और सीएक्स = हटाए गए खोज आईडी और क्यू = द डेविल + + डाउन + + जॉर्जिया और alt = atom और num = 5) [function.file -जेट-सामग्री]: स्ट्रीम खोलने में विफल: सी 2 में ऐसी कोई फ़ाइल या निर्देशिका नहीं है: \ xampp \ htdocs \ tutorial \ retrieve_website.php लाइन 2 9 पर

चेतावनी: DOMDocument :: loadXML () [domdocument.loadxml]: लाइन 33 पर C: \ xampp \ htdocs \ tutorial \ retrieve_website.php में इनपुट के रूप में आपूर्ति की गई खाली स्ट्रिंग

openssl: कोई http wrapper: yes https wrapper: no wrappers: array (10) {[0] => स्ट्रिंग (3) "php" [1] => स्ट्रिंग (4) "फ़ाइल" [2] => स्ट्रिंग (4 ) "ग्लोब" [3] => स्ट्रिंग (4) "डेटा" [4] => स्ट्रिंग (4) "http" [5] => स्ट्रिंग (3) "एफटीपी" [6] => स्ट्रिंग (3) " ज़िप "[7] => स्ट्रिंग (13)" compress.zlib "[8] => स्ट्रिंग (14)" compress.bzip2 "[9] => स्ट्रिंग (4)" फार "}

यह क्या है कि मैंने अनदेखा किया है या करने में असफल रहा है? अपने ज्ञान के लिए, मैंने सब कुछ किया है जिसे मैंने एचटीटीपीएस और ओपनएसएसएल के बारे में शोध किया है




मेरे मामले में, यह मुद्दा अपाचे की तुलना में सीएलआई के लिए एक अलग php.ini का उपयोग करके WAMP के कारण था, इसलिए WAMP मेनू के माध्यम से बनाई गई आपकी सेटिंग्स सीएलआई पर लागू नहीं होती है। बस सीएलआई php.ini संशोधित करें और यह काम करता है।




आपका अपाचे शायद एसएसएल समर्थन के साथ संकलित नहीं है। वैसे भी file_get_contents की बजाय curl का प्रयोग करें। इस कोड को आज़माएं, अगर यह विफल हो जाता है तो मैं सही हूं।

function curl_get_contents($url)
{
  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
  $data = curl_exec($curl);
  curl_close($curl);
  return $data;
}



मैं opsenSUSE लीप का उपयोग कर रहा हूं, और मेरे पास एक ही समस्या थी - इसका मतलब है कि ओपनएसएसएल के लिए कोई समर्थन नहीं है। इस तरह मैंने इसे हल किया:

  1. ओपन YaST।
  2. सॉफ्टवेयर प्रबंधन पर जाएं।
  3. बाएं फलक पर खोज बॉक्स में, 'php5-openssl' दर्ज करें और वापसी कुंजी दबाएं।
  4. इसे चुनने के लिए दाएं फलक में 'php5-openssl' के बगल में स्थित चेकबॉक्स पर क्लिक करें, और 'स्वीकार करें' पर क्लिक करें (यह ओपनएसएसएल समर्थन जोड़ता है)।
  5. अपाचे को पुनरारंभ करें: sudo service apache2 restart

यही वह है, आप कर चुके हैं।




आप इसके बजाय इस फ़ंक्शन का उपयोग कर सकते हैं।

function get_url_contents($url){  
  if (function_exists('file_get_contents')) {  
    $result = @file_get_contents($url);  
  }  
  if ($result == '') {  
    $ch = curl_init();  
    $timeout = 30;  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
    $result = curl_exec($ch);  
    curl_close($ch);  
  }  

  return $result;  
}



इसे इस्तेमाल करे:

function curl($url){
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    $buffer = curl_exec($curl);
    curl_close($curl);
    return $buffer;
}




मैक एएमपीपीएस पर, मैंने निम्नलिखित के साथ php-5.5.ini अपडेट किया है और अब यह काम करता है।

allow_url_include = On
extension=openssl.so



Php.ini फ़ाइल में PHP7, ";" को हटा दें extension=openssl से पहले extension=openssl