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


143

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

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

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

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

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

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

अब मेरे पुनः प्राप्त करने की विधि में कोड की पंक्ति इस तरह दिखती है:

$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 कॉन्फ़िगर करते समय इसे सक्षम करना भूल गए? C: \ xampp \ htdocs \ ट्यूटोरियल \ 29 पर लाइन में पुनः प्राप्त करें / पुनर्प्राप्त करें।

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

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

खुलने का समय: कोई http आवरण: हाँ https आवरण: कोई आवरण: सरणी (10) {[0] => स्ट्रिंग (3) "php" [1] => स्ट्रिंग (4) "फ़ाइल" [2] => स्ट्रिंग (4) ) "ग्लोब" [3] => स्ट्रिंग (4) "डेटा" [4] => स्ट्रिंग (4) "http" [5] => स्ट्रिंग (3) "एफ़टीपी" [6] => स्ट्रिंग (3) " zip "[7] => स्ट्रिंग (13)" compress.zlib "[8] => स्ट्रिंग (14)" compress.bzip2 "[9] => स्ट्रिंग (4)" चरण "}

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

जवाबों:


183

मैंने इसे XAMPP ;extension=php_openssl.dllमें phpinfo () के /apache/bin/php.ini बावजूद मुझे /php/php.iniलोडेड आईएनआई फ़ाइल बताकर अनसुना करके हल कर दिया ।

संपादित करें: मुझे लगता है कि एज्रा उत्तर सीधे विस्तार लाइन को उचित आईएनआई फ़ाइल में जोड़ने का सबसे अच्छा समाधान है।


1
क्या आपको यकीन है कि इसका /apache/bin/php.ini, मैं इसे XAMPP पोर्टेबल लाइट 1.8.1 में नहीं पा सकता हूँ? हालांकि php/php.iniमौजूद है, लेकिन यहां ssl को सक्षम करने से मदद नहीं मिलती :(
सिरका

1
यह उत्तर तब एक और समस्या पैदा करेगा क्योंकि अब ओपनसिएल निष्क्रिय हो गया है और अगर मुझे एक सुरक्षित लिंक मिल जाता है तो एक त्रुटि होगी
thedjaney

5
मेरे लिए यह था xampp/php/php.ini:) धन्यवाद, पुनश्च: मत भूलना
आगे आने वाले स्थानों को बदलने के

97

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


2
मुझे लाइन को जोड़ना था, क्योंकि यह php.ini में नहीं था - लेकिन फिर चाल चली - धन्यवाद!
Q स्टूडियो

33

बस अपनी php.ini फ़ाइल में दो लाइनें जोड़ें।

extension=php_openssl.dll
allow_url_include = On

मेरे लिए यह काम कर रहा है।


7
मैं wamp का उपयोग कर रहा हूँ और आपको php.ini को apache फोल्डर में संपादित करने की आवश्यकता है, न कि सामान्य रूप से PHP फोल्डर में: O
Al_

धन्यवाद, यह allow_url_include = Onमेरे लिए इसे हल किया गया था।
कीई

Allow_url_include को सक्षम न करें - यह आपके सर्वर को कमजोर बनाता है।
पास्कल

18

आपकी अपाचे संभवतः एसएसएल समर्थन के साथ संकलित नहीं है। वैसे भी 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;
}

1
उस कर्ल फ़ंक्शन को आपने मुझे दिया और उसके $xmlresults = file_get_contents($urlquery);साथ बदल दिया $xmlresults = curl($urlquery);। PHP स्क्रिप्ट ने इसे file_get_contents () के समान परिणामों के साथ ठीक किया। के माध्यम से के रूप में पीएचपी वेब पेज यह चल रहा है स्थानीय होस्ट / ट्यूटोरियल / retrieve_website.php और मैं इस त्रुटि मिलती है:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
जॉन एम

1
SSL सपोर्ट में प्रॉब्लम प्रोबाय है, phpinfo () चलाएं और चेक करें कि क्या कमांड / फ्लैग निम्नलिखित हैं: '--with-openssl=/usr' '--with-openssl-dir=/usr'मूल रूप से आपको SSL सपोर्ट के साथ Apache को कंपाइल करना होगा, आपको CURL को भी सक्षम करना चाहिए जो FGC की तुलना में दो गुना तेज है, और इसके कई विकल्प हैं। मुझे नहीं पता कि विंडोज पर यह कैसे करना है, क्षमा करें।
देजान मार्जनोविच

1
केवल उसी चीज़ के करीब जो phpinfo () के शीर्ष पर कॉन्फ़िगर कमांड है और जिसमें कुछ भी नहीं है - जिसमें -ssl से संबंधित है। इसमें अन्य चीजें भी शामिल हैं। छोटा अपडेट: लोकलहोस्ट पर, स्टेटस चेक किया गया और यह कहता है कि HTTPS (SSL) सक्रिय है।
जॉन एम।

1
यदि आप आह्वान करते हैं return curl_exec($curl);, तो क्या curl_close($curl);अगली पंक्ति को क्रियान्वित होने से नहीं रोका जाएगा ?
जेसन प्लांक

12

मैं Opensl एक्सेंशन सक्षम करता हूं और यह मेरे लिए काम करता है :)

; विस्तार = php_openssl.dll

सेवा

विस्तार = php_openssl.dll


6

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


1
आपका स्वागत है कि आपने यह कैसे किया जहाँ मैं CLI php.ini पा सकता हूँ
botenvouwer

1
मेरा यहाँ स्थित है:C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne

2
आपके उत्तर के लिए धन्यवाद, मैंने सोचा कि जहां कई php.ini फाइलें हैं। जब मैंने खोजा तो मुझे केवल एक मिला और मैंने इसे अनफॉलो कर दिया: एक्सटेंशन; php_openssl.dll। लेकिन मैं xammp का उपयोग करता हूं मैंने इसे वैंप के साथ भ्रमित किया। अब यह काम करता है, हाँ!
बोटनवूवर

6

में OpenSuse 12.1 केवल एक चीज की आवश्यकता थी:

zypper in php5-openssl

1
क्या आप कृपया समझा सकते हैं ??
जेसन डब्ल्यू

1
मेरा मतलब है कि मुझे त्रुटि संदेश मिला "रैपर को खोजने में असमर्थ" https "- क्या आपने PHP कॉन्फ़िगर करते समय इसे सक्षम करना भूल गए?" और कमांड लाइन पर "zypper in php5-coverssl" दर्ज करके इसे हल किया। उस त्रुटि को ठीक किया।
TheSatinKnight

5

मेरे लिए मुझे php.ini में इन पंक्तियों को अनसुना करना था:

extension=php_openssl.dll
extension_dir = "ext"

"ext" लागू होता है यदि php_openssl.dll "ext" फ़ोल्डर में स्थित है।

नोट: मुझे अपनी php.ini फ़ाइलों में से दो के लिए ऐसा करना था अन्यथा यह काम नहीं करेगा। एक डीएसपीपी स्थापना फ़ोल्डर में स्थित है, और दूसरा पीएचपी फ़ोल्डर पर

C:\Program Files (x86)\Jcx.Software\VS.Php\2013\Php 5.6
C:\Program Files (x86)\PHP\v5.6

स्रोत


5

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

allow_url_include = On
extension=openssl.so

5

मेरे मामले में (FastCGI मोड में विंडोज़ पर PHP 7.3) यह असुविधाजनक था extension=openssl। नहीं विस्तार = php_ openssl , ज्यादातर लोगों यहाँ पोस्ट के रूप में।

(एक ही चीज़ यहां पोस्ट की गई थी , लेकिन ओएस पर विवरण के बिना जो यहां एक महत्वपूर्ण अंतर हो सकता है।)



4

Windows में अनुरोध https के लिए file_get_contents के साथ समस्या , php.ini फ़ाइल में निम्न पंक्तियों को अनलिमिटेड करें:

extension=php_openssl.dll
extension_dir = "ext"

4

आप इस फ़ंक्शन का उपयोग कर सकते हैं इसके बजाय अगर आपके सिस्टम पर कर्ल स्थापित है:

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;  
}

2

पूरे दिन सूँघने के बाद, मैंने इस गाइड के लिए उत्तर का धन्यवाद किया: http://piwigo.org/forum/viewtopic.php?id=15727

मूल रूप से ग्रहण के तहत -> विंडोज -> प्राथमिकताएं -> PHP एक्ज़ीक्यूटेबल्स, जहां .exe और .ini को संदर्भित किया जाता है पर एक खंड है। जब आप PHP डेवलपमेंट टूल SDK फ़ीचर को Eclipses से इंस्टॉल करते हैं, तो मदद मेनू में नए सॉफ़्टवेयर इंस्टॉल करते समय डिफ़ॉल्ट रूप से ग्रहण निर्देशिका में थे।

तो इसके बजाय, मैंने PHP 5.3.5 (CGI) नामक एक नया निष्पादन योग्य जोड़ा और xampp के php फ़ोल्डर से cgi.exe और .ini का संदर्भ दिया।

मेरी मदद करने के लिए अपना समय देने के लिए धन्यवाद webarto।


2

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

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

बस, हो गया।


1

मुझे यह त्रुटि भी मिली। मुझे पता चला कि PHP के मेरे संस्करण में Opensl संकलित नहीं है, इसलिए केवल php.ini के लिए एक्सटेंशन निर्देश जोड़ना पर्याप्त नहीं था। मुझे नहीं पता कि आपको अपने विशेष मामले में इसे कैसे हल करना है, लेकिन मेरे लिए, मैं macports का उपयोग करता हूं, और कमांड बस था:

sudo port install php5-openssl

1

Winginx (Apache आधारित के बजाय nginx आधारित) का उपयोग करने वालों के लिए , मैंने इसे इन 4 चरणों के साथ तय किया:

  1. पर उपकरण मेनू मारा Winginx PHP5 कॉन्फ़िग (कोई बात नहीं 5 नाम पर ...):

    Winginx PHP5 विन्यास

  2. PHP संस्करण चुनें जिसे आप बदलना चाहते हैं php.ini :

    PHP संस्करण चयन

  3. पर पीएचपी एक्सटेंशन टैब का चयन करें php_openssl विस्तार और मारा सहेजें बटन:

    php_openssl चयन

  4. टास्कबार ( स्टॉप एंड स्टार्ट ) के माध्यम से उपयुक्त PHP सेवा को पुनः आरंभ करें :

    PHP सेवा को पुनरारंभ करें


1

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

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;
}


2
यह इस सवाल से अलग कैसे है जो पहले से ही इस सवाल पर है ?
HPierce

@ इसमें 2 रेखाएँ हैं जो उन रेखाओं के आरंभ और अंत में प्रतिपादक ऑपरेटर के कारण एक वाक्यविन्यास त्रुटि का कारण बनेगी ... हटाए जाने के लिए ध्वजांकित।
CPHPython

@CPHPython मुझे लगता है कि उन्होंने एक कोड ब्लॉक के अंदर बोल्ड स्टाइल का उपयोग करने की कोशिश की
निक

1
@CPHPython, आप कोड को बोल्ड कर सकते हैं, लेकिन आपको अलग-अलग वाक्यविन्यास का उपयोग करना होगा ... यदि आप एक <code> <pre> सामान्य कोड ... बोल्ड कोड * 's </ pre> </ code> के साथ करते हैं, तो आप इसे प्राप्त करते हैं :-)। जाहिर तौर पर मुझे नहीं पता था कि 2016 में या मैंने इसे संपादित किया होगा। भले ही, मैं इसे हटाकर देख कर खुश हूं।
HPierce

1
@ क्लिक करें, आप कोड को बोल्ड कर सकते हैं! मेरा मानना ​​है कि यह कहीं भी प्रलेखित नहीं है। मैंने इसे एक उदाहरण के रूप में यहां किया है, लेकिन मुझे लगता है कि यह अभी भी हटा दिया जाएगा।
HPierce

0

अगर आप wamp सर्वर का उपयोग कर रहे हैं तो इस पर आइकन पर क्लिक करें wamp सर्वर आइकन इस पर क्लिक करें

फिर PHP पर जाएं फिर PHP एक्सटेंशन पर क्लिक करें वहाँ php_openssl को वहां से सक्रिय करने और wamp सर्वर को पुनरारंभ करने की आवश्यकता होगी सक्रिय php_openssl यहाँ से


-1

अंदर simple_html_dom.php परिवर्तन की मूल्य $offsetसे चर -1करने के लिए 0। यह त्रुटि आमतौर पर तब होती है जब आप PHP 7 में प्रवास करते हैं

HtmlDomParser::file_get_htmlअपनी समस्या को ठीक करने के लिए -1, डिफ़ॉल्ट ऑफ़सेट का उपयोग 0करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.