ไม่พบ wrapper“ https” - คุณลืมเปิดใช้งานเมื่อคุณกำหนดค่า PHP หรือไม่


144

ปัญหาอยู่ในคำถาม ฉันได้ทำการตรวจสอบอย่างละเอียดเพื่อหาทางแก้ปัญหาที่เกี่ยวกับเรื่องนี้และฉันรู้ว่ามีหัวข้อนี้และฉันได้ติดตามพวกเขาด้วยและไม่มีอะไรทำงาน ที่ถูกกล่าวว่าฉันจะออกรายการทุกอย่างที่ฉันได้ทำจนถึง ฉันใช้ PHP 5.2.14 พร้อมการแก้จุดบกพร่อง Zend สำหรับเวอร์ชัน Eclipse ล่าสุดบนคอมพิวเตอร์ Windows XP ของฉัน ฉันมี RAM 1 GB ฉันติดตั้ง XAMPP พร้อม Apache, MySQL และ FileZilla

บน XAMPP ฉันได้ทำดังต่อไปนี้ (Apache ถูกปิดในช่วงการเปลี่ยนแปลงเหล่านี้): คลิกธุรการจาก Control Panel XAMPP https:// localhost/xampp/และเดินไป จากที่นั่นฉันยอมรับ certs จากบรรทัดนี้ในหน้าต้อนรับ:

สำหรับการสนับสนุน OpenSSL โปรดใช้ใบรับรองการทดสอบกับ https: // 127.0.0.1 หรือ https: // localhost

phpinfo()มาตราเดียวกันกับที่ผมตรวจสอบ ภายใต้ 'สิ่งแวดล้อม' คือSERVER["HTTPS"] onภายใต้ 'Apache สิ่งแวดล้อม' คือHTTPS Onภายใต้ 'ตัวแปร PHP, คือ_SERVER["HTTPS"] Onใต้ 'Phar' OpenSSL supportคือdisabled(ติดตั้ง ext / openssl) ฉันไม่รู้วิธีเปิดใช้งาน Phar

ตอนนี้เกี่ยวกับไฟล์ใน C: \ xampp ฉันไปที่โฟลเดอร์ PHP ภายใต้การผลิตและการพัฒนาไฟล์ php.ini (ดีกว่าปลอดภัยกว่าขออภัย) ผมมีallow_url_fopen=On, allow_url_include=Onและฉันออกอัฒภาคเพื่อที่extension=php_openssl.dllจะไม่ออกความเห็น ฉันยังยืนยันว่า. dll ที่อยู่ในโฟลเดอร์ ext ของโฟลเดอร์ PHP ทั้ง libeay32.dll และ ssleay32.dll อยู่ในโฟลเดอร์ PHP และ Apache โฟลเดอร์ Apache ไม่มีไฟล์ php.ini ที่เป็นประโยชน์หรือกำลังพัฒนา

ฉันไปhttp://www.slproweb.com/products/Win32OpenSSL.htmlและติดตั้ง Win32 OpenSSL v1.0.0d เพื่อวัดอย่างปลอดภัย

ตอนนี้บรรทัดของรหัสที่เป็นปัญหาใน restore_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 บน Eclipse ผลลัพธ์ทุกอย่างสมบูรณ์แบบอย่างที่ฉันต้องการพร้อมกับผลลัพธ์เหล่านี้:

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

แม้จะมีการเปลี่ยนแปลงทั้งหมดที่ฉันทำ (หลังจากที่ฉันเริ่ม Apache) ฉันยังคงได้รับข้อผิดพลาดเดิมในครั้งแรกที่ฉันเข้าถึงสคริปต์ PHP ใน Eclipse และ Firefox ผ่านhttp: //localhost/tutorial/retrieve_website.php :

คำเตือน: file_get_contents () [function.file-get-content]: ไม่พบ wrapper "https" - คุณลืมเปิดใช้งานเมื่อคุณกำหนดค่า PHP หรือไม่ ใน C: \ xampp \ htdocs \ tutorial \etch_website.php บรรทัดที่ 29

คำเตือน: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= API ID ที่ลบ & cx = ลบ ID การค้นหา & q = The + Devil + ไป + ลง + ถึง + Georgia & alt = atom & num = 5) [function.file-get-content]: ไม่สามารถเปิดกระแสข้อมูล: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวใน C: \ xampp \ htdocs \ tutorial \etch_website.php ที่บรรทัด 29

คำเตือน: DOMDocument :: loadXML () [domdocument.loadxml]: สตริงว่างที่ให้มาเป็นอินพุตใน C: \ xampp \ htdocs \ tutorial \etch_website.php บรรทัด 33

openssl: ไม่มี http wrapper: ใช่ https wrapper: no wrappers: array (10) {[0] => สตริง (3) "php" [1] => สตริง (4) "ไฟล์" [2] => สตริง (4) ) "glob" [3] => สตริง (4) "data" [4] => สตริง (4) "http" [5] => สตริง (3) "ftp" [6] => สตริง (3) " zip "[7] => สตริง (13)" compress.zlib "[8] => สตริง (14)" compress.bzip2 "[9] => สตริง (4)" phar "}

ฉันมองข้ามหรือไม่ทำอะไร สำหรับความรู้ของฉันฉันได้ทำทุกอย่างที่ฉันได้ทำการวิจัยเกี่ยวกับ HTTPS และ OpenSSL

คำตอบ:


183

ฉันจะแก้ไขใน XAMPP โดย uncommenting ;extension=php_openssl.dllใน/apache/bin/php.ini แม้จะ phpinfo () บอกฉัน/php/php.iniเป็นไฟล์ INI โหลด

แก้ไข:ฉันเดาคำตอบ Ezra เป็นทางออกที่ดีที่สุดโดยตรงเพิ่มบรรทัดขยายไปยังไฟล์ ini ที่เหมาะสม


1
คุณแน่ใจหรือไม่ว่า/apache/bin/php.iniฉันไม่พบใน XAMPP Portable Light 1.8.1 อย่างไรก็ตามphp/php.iniมีอยู่แล้ว แต่การเปิดใช้งาน ssl ที่นี่ไม่ได้ช่วย :(
เถาวัลย์

1
คำตอบนี้ก็จะสร้างปัญหาอื่นเพราะ OpenSSL คือตอนนี้คนพิการและจะโยนความผิดพลาดถ้าฉัน get_file_contents การเชื่อมโยงการรักษาความปลอดภัย
thedjaney

5
สำหรับฉันมันเป็นxampp/php/php.ini:) ขอบคุณ PS: อย่าลืมรีสตาร์ท APACHE หลังจากการเปลี่ยนแปลงการประหยัด
jave.web

97

ฉันมีการเพิ่มextension=php_openssl.dllของฉันไฟล์ที่อยู่ในphp.ini xampp/php/php.iniยังไงก็เถอะมันไม่ได้อยู่ที่นั่นหลังจากเพิ่มและรีสตาร์ท Apache ทุกอย่างทำงานได้ดี


2
ฉันต้องเพิ่มบรรทัดเนื่องจากมันไม่ได้อยู่ใน php.ini - แต่หลังจากนั้นก็ทำอุบาย - ขอบคุณ!
Q Studio

33

เพียงเพิ่มสองบรรทัดในไฟล์ php.ini ของคุณ

extension=php_openssl.dll
allow_url_include = On

มันทำงานให้ฉัน


7
ฉันกำลังใช้ wamp และคุณต้องแก้ไข php.ini ในโฟลเดอร์ apache แทนที่จะเป็นปกติในโฟลเดอร์ PHP: O
Al_

ขอบคุณมันเป็นสิ่งallow_url_include = Onที่แก้ไขได้สำหรับฉัน
Kiee

อย่าเปิดใช้งาน allow_url_include ซึ่งจะทำให้เซิร์ฟเวอร์ของคุณมีช่องโหว่
Pascal9x

18

Apache ของคุณอาจไม่ได้รวบรวมกับการสนับสนุน SSL ใช้ cURL แทน file_get_contents ลองใช้รหัสนี้ถ้ามันล้มเหลวฉันก็พูดถูก

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 Script ทำงานได้ดีกับผลลัพธ์เดียวกันกับ file_get_contents () ใช้เป็นหน้าเว็บ PHP ผ่านlocalhost / tutorial / restore_website.phpและฉันได้รับข้อผิดพลาดนี้:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M

1
ปัญหาคือ probaby ในการสนับสนุน SSL, รันphpinfo ()และตรวจสอบว่ามีคำสั่ง / ค่าสถานะต่อไปนี้หรือไม่: '--with-openssl=/usr' '--with-openssl-dir=/usr'โดยทั่วไปคุณต้องคอมไพล์ Apache ด้วยการสนับสนุน SSL คุณควรเปิดใช้ cURL ที่เร็วกว่า FGC สองเท่าและมีตัวเลือกมากมาย ฉันไม่รู้ว่าจะทำอย่างไรกับ Windows ขออภัย
Dejan Marjanović

1
สิ่งเดียวที่อยู่ใกล้กับที่เป็นคำสั่งกำหนดค่าที่ด้านบนของ phpinfo () และที่ไม่มีอะไรที่มี --with-openssl ที่เกี่ยวข้อง มันมีอื่น ๆ - กับสิ่งต่าง ๆ การอัพเดทเล็กน้อย: บนโลคัลโฮสต์ตรวจสอบสถานะและแจ้งว่าเปิดใช้งาน HTTPS (SSL)
John M

1
หากคุณเรียกใช้return curl_exec($curl);จะไม่ป้องกันcurl_close($curl);ในบรรทัดถัดไปจากการดำเนินการ?
Jason Plank


6

ในกรณีของฉันปัญหาเกิดจาก WAMP ใช้ php.ini สำหรับ CLI ต่างจาก Apache ดังนั้นการตั้งค่าของคุณที่ทำผ่านเมนู 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 หลายไฟล์ เมื่อฉันค้นหาฉันพบเพียงหนึ่งและฉันไม่ใส่หมายเหตุ:; extension = php_openssl.dll แต่ฉันใช้ xammp ฉันสับสนกับ wamp ตอนนี้ใช้งานได้!
botenvouwer

6

ใน OpenSuse 12.1 สิ่งเดียวที่จำเป็นคือ:

zypper in php5-openssl

1
คุณช่วยอธิบายได้มั้ย
Jason W

1
ฉันหมายถึงฉันได้รับข้อความแสดงข้อผิดพลาด "ไม่พบเสื้อคลุม" https "- คุณลืมเปิดใช้งานเมื่อคุณกำหนดค่า PHP หรือไม่" และแก้ไขได้โดยป้อน "zypper ใน php5-openssl" ที่บรรทัดคำสั่ง ที่แก้ไขข้อผิดพลาด
TheSatinKnight

5

สำหรับฉันฉันต้องยกเลิกข้อคิดเห็นในบรรทัดเหล่านี้ใน php.ini:

extension=php_openssl.dll
extension_dir = "ext"

"ext" ใช้งานได้หาก php_openssl.dll อยู่ในโฟลเดอร์ "ext"

หมายเหตุ:ฉันต้องทำเช่นนี้สำหรับสองไฟล์ php.ini ของฉันมิฉะนั้นจะใช้งานไม่ได้ หนึ่งอยู่ในโฟลเดอร์การติดตั้ง vs.php และอื่น ๆ บนในโฟลเดอร์ PHP

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

ในกรณีของฉัน (PHP 7.3 บน Windows ในโหมด FastCGI) มันไม่ได้extension=opensslกล่าวถึง ไม่ใช่ส่วนขยาย = php_ opensslเนื่องจากคนส่วนใหญ่โพสต์ที่นี่

(สิ่งเดียวกันถูกโพสต์ที่นี่แต่ไม่มีรายละเอียดเกี่ยวกับระบบปฏิบัติการซึ่งอาจเป็นความแตกต่างที่สำคัญที่นี่)



4

มีปัญหากับ file_get_contents สำหรับคำขอ https ใน Windowsโดยไม่ใส่หมายเหตุบรรทัดต่อไปนี้ในไฟล์ php.ini:

extension=php_openssl.dll
extension_dir = "ext"

4

คุณสามารถใช้ฟังก์ชั่นนี้แทนหากติดตั้ง curl ในระบบของคุณ:

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

โดยทั่วไปภายใต้ Eclipse -> Windows -> Preferences -> PHP Executables มีส่วนที่อ้างอิง. exe และ. ini ค่าเริ่มต้นอยู่ในไดเรกทอรี Eclipse เมื่อคุณติดตั้งฟีเจอร์ SDK เครื่องมือพัฒนา PHP จาก Eclipses ติดตั้งซอฟต์แวร์ใหม่ในเมนูวิธีใช้

ดังนั้นแทนที่จะเป็นเช่นนั้นฉันได้เพิ่มปฏิบัติการใหม่ที่เรียกว่า PHP 5.3.5 (CGI) และอ้างอิง cgi.exe และ. ini จากโฟลเดอร์ php ของ xampp

ขอบคุณ webarto ที่สละเวลาเพื่อช่วยฉัน


2

ฉันใช้ opsenSUSE Leap และฉันมีปัญหาเดียวกัน - หมายความว่าไม่มีการรองรับ OpenSSL นี่คือวิธีที่ฉันแก้ไขมัน:

  1. เปิด YaST
  2. ไปที่การจัดการซอฟต์แวร์
  3. ในช่องค้นหาทางบานหน้าต่างด้านซ้ายให้ป้อน 'php5-openssl' แล้วกดปุ่มย้อนกลับ
  4. คลิกช่องทำเครื่องหมายถัดจาก 'php5-openssl' ในบานหน้าต่างด้านขวาเพื่อเลือกและคลิก 'ยอมรับ' (ซึ่งเป็นการเพิ่มการสนับสนุน OpenSSL)
  5. รีสตาร์ท Apache: sudo service apache2 restart

แค่นั้นแหละคุณก็ทำเสร็จแล้ว


1

ฉันได้รับข้อผิดพลาดนี้ด้วย ฉันคิดว่า PHP เวอร์ชันของฉันไม่ได้คอมไพล์ openssl ไว้ดังนั้นเพียงแค่เพิ่มคำสั่งส่วนขยายไปยัง php.ini ไม่เพียงพอ ฉันไม่รู้ว่าคุณต้องแก้ปัญหานี้อย่างไรในกรณีเฉพาะของคุณ แต่สำหรับฉันฉันใช้ macports และคำสั่งก็แค่:

sudo port install php5-openssl

1

สำหรับผู้ที่ใช้Winginx (อิง nginx แทนที่จะเป็น Apache) ฉันจะแก้ไขด้วย 4 ขั้นตอนเหล่านี้:

  1. บนเมนูเครื่องมือกดWinginx PHP5 Config (ไม่ต้องคำนึงถึง5ในชื่อ ... ):

    การกำหนดค่า Winginx PHP5

  2. เลือกเวอร์ชัน PHP ที่คุณต้องการให้php.iniเปลี่ยน:

    การเลือกเวอร์ชั่นของ PHP

  3. บนแท็บPHP Extensionsเลือกphp_openssl extension และกดปุ่มSave :

    การเลือก 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

@HPierce มันมี 2 บรรทัดที่จะทำให้เกิดข้อผิดพลาดทางไวยากรณ์เนื่องจากตัวดำเนินการการยกกำลังที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัดเหล่านั้น ... ตั้งค่าสถานะสำหรับการลบ
CPHPython

@CPHPython ฉันคิดว่าพวกเขาพยายามใช้สไตล์ตัวหนาในบล็อครหัส
นิค

1
@CPHPython คุณสามารถใช้รหัสตัวหนา แต่คุณต้องใช้ไวยากรณ์ที่แตกต่างกัน ... ถ้าคุณทำ <code> <pre> รหัสปกติ ... รหัสตัวหนาที่มี * '</pre> </code> คุณจะได้รับมัน :-) เห็นได้ชัดว่าฉันไม่ทราบว่าในปี 2559 หรือฉันอาจแก้ไขสิ่งนี้ ไม่ว่าฉันจะดีใจที่ได้เห็นมันถูกลบไปแล้ว
HPierce

1
@Nick คุณสามารถรหัสหนา! ฉันไม่เชื่อว่าจะมีการบันทึกไว้ที่ใดก็ได้ ฉันทำที่นี่เป็นตัวอย่าง แต่ฉันคิดว่านี่จะยังคงถูกลบ
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ควรแก้ไขปัญหาของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.