SSL-протокол сокета в PHP не включен

У меня проблемы с включением транспорта сокетов "ssl" в PHP. Когда я запускаю свой скрипт, я получаю сообщение об ошибке:

Предупреждение: fsockopen () [function.fsockopen]: невозможно подключиться к ssl: //www.my.site.com: 443 (Невозможно найти транспортный сокет «ssl» - вы забыли включить его при настройке PHP? )

Я запускаю IIS6 в Windows, и вот что я сделал до сих пор, чтобы попытаться заставить его работать:

  • раскомментировал расширения php_openssl.dll и php_sockets.dll в php.ini
  • убедился, что PHP загружает ini-файл, в который я внес изменения (это так, и он определенно загружает другие расширения, поэтому я почти уверен, что это не проблема)
  • убедился, что php_openssl.dll и php_sockets.dll находятся в правильном месте
  • скопировал ssleay32.dll и libeay32.dll в основную папку PHP, папку WINDOWS и папку WINDOWS / system32
  • убедитесь, что переменная пути Windows включает расположение PHP
  • убедился, что права доступа к файлам были правильными для всех соответствующих файлов.

Я перезапускал IIS после почти каждого изменения, но мне не повезло. Есть ли что-нибудь очевидное, что я делаю не так? Есть ли способ устранить это в более мелких частях? (Значит, я могу решить проблему методом исключения ...?)

К сожалению, Windows / IIS не является моей областью знаний - меня назначили ответственным, потому что никто больше ничего не знает.


person jelina    schedule 10.11.2009    source источник
comment
как выглядит php.log, если вы не включили ведение журнала, сделайте это.   -  person RageZ    schedule 10.11.2009
comment
Чтобы расширить комментарий @ RageZ: включен ли display_startup_errors в php.ini?   -  person Ben Dunlap    schedule 10.11.2009
comment
Да, у нас включено ведение журнала ... но, поскольку я n00b, я совершенно забыл проверить ›_‹ Мы получаем следующую ошибку: Предупреждение PHP: Запуск PHP: Невозможно загрузить динамическую библиотеку C: \ PHP \ ext \ php_openssl.dll '- Доступ запрещен. Увидев это, я подумал, что это может быть проблема с разрешениями с php_openssl.dll, но мы сравнили ее с другой dll в этой папке (которая, как мы знаем, загружается), и у них, похоже, такие же разрешения и группы. Есть ли что-то еще, что может мешать загрузке этой DLL?   -  person jelina    schedule 11.11.2009


Ответы (7)


У меня возникла проблема в Windows 7 с PHP 5.4.0 в командной строке, используя сервер Xampp 1.8.1. Вот что я сделал:

  1. Переименуйте php.ini-production в php.ini (в папке C: \ xampp \ php \)
  2. Отредактируйте php.ini и раскомментируйте extension_dir=ext.
  3. Также раскомментируйте extension=php_openssl.dll.

После этого все заработало.

person cikatomo    schedule 18.11.2012
comment
Используя WampServer 2.2, я просто редактирую php.ini в C:\wamp\bin\php\php5.3.13, а затем раскомментирую extension=php_openssl.dll. - person Rubens Mariuzzo; 26.05.2013
comment
Просто раскомментировав extension = php_openssl.dll и перезапустив Apache, я тоже сработал. - person Layton Everson; 02.06.2013
comment
Большое спасибо. Я чуть не заплакал :-) - person M. Ahmad Zafar; 28.06.2013
comment
Спасибо, Вамп использовал другой файл php.ini вместо php.ini в C: \ wamp \ bin \ php \ phpversion \ php.ini. Мне пришлось раскомментировать расширение open_sll в этом файле php.ini, а не в предложенном php.ini. пользователя wamp. Надеюсь, это поможет любому, у кого такая же проблема. - person csblo; 24.07.2014
comment
работал у меня на 5.6.11, теперь я могу читать https-адрес с помощью $ data = file_get_contents ($ url); - person medloh; 11.07.2015
comment
Это отвлекающий маневр, потому что он пытается избежать проблемы, а не исправить ее. На самом деле вам нужны только настройки, как описано в stackoverflow.com/questions/1705856/ - person Pacerier; 15.07.2015

Успех!

Проверив файлы журнала и убедившись, что права доступа к php_openssl.dll верны, я погуглил предупреждение и нашел еще кое-что, чтобы попробовать.

So I:

  • добавлен C: \ PHP \ ext в путь Windows
  • добавлены libeay32.dll и ssleay32.dll в C: \ WINDOWS \ system32 \ inetsrv
  • перезагрузил сервер

Я не уверен, что из этого решило мою проблему, но теперь она определенно исправлена! :)

Я нашел эти вещи, чтобы попробовать на этой странице: http://php.net/manual/en/install.windows.extensions.php

Спасибо за вашу помощь!

person jelina    schedule 11.11.2009
comment
@RubensMariuzzo, спасибо, но я уже решил, проблема была в моей 64-битной системе, и решение заключалось в том, чтобы скопировать несколько DLL в некоторые места, я не помню точных шагов. - person coding_idiot; 26.05.2013
comment
@taarradhin, libay32.dll и ssleay32 не нужны, нужны всего 3 вещи: - person Pacerier; 15.07.2015
comment
@coding_idiot, 1) extension_dir должен указывать на папку, в которой находятся оба php_sockets.dll и php_openssl.dll, и 2) у вас должны быть строки extension=php_openssl.dll и extension=php_sockets.dll и 3) убедитесь, что их значения не перезаписываются указанным ниже ключом. Это очень часто. Просто эти 3, и все готово. - person Pacerier; 15.07.2015
comment
Вырвав у меня слух из-за этого сегодня, и определенно этих трех вещей недостаточно. Не копирует и два файла DLL. Очень раздражает то, что нет реального, простого решения этой проблемы для XAMPP / Windows10 / 64-бит ... Я рассматриваю возможность переустановки XAMPP любой последней версии с нуля на данный момент. - person CK MacLeod; 04.03.2017

В XAMPP версии 1.7.4 сервер не имеет строки extension = php_openssl.dll в файле php ini. Мы должны добавить extension = php_openssl.dll в файл php.ini

person Selvakumar    schedule 07.01.2013
comment
Действительно, его нужно добавлять вручную, но, к счастью, в папке ext находится php_openssl.dll. - person Valentin Despa; 29.01.2013

Возникла та же проблема на Laravel 4, пытаясь отправить электронную почту с использованием SSL-шифрования.

Имея WAMPServer 2.2 на 64-битной Windows 7, я включил только php_openssl в php.ini, перезапустил WAMPServer и работал безупречно.

Сделал следующее:

  • Нажмите WampServer -> PHP -> Расширения PHP -> php_openssl
  • Перезагрузите WampServer
person Marko Aleksić    schedule 15.05.2013

Просто раскомментируйте extension = php_openssl.dll. Перезапустите службу Apache, и это должно помочь.

person Yogesh Unavane    schedule 01.01.2014

Я также столкнулся с этой проблемой только сейчас, когда возился с laravel.

Я использую wampserver для окон, и мне пришлось скопировать файл /bin/apache/apacheversion/bin/php.ini в /bin/php/phpversion/php.ini

person Dale    schedule 28.11.2012

Я использую XAMPP и столкнулся с той же ошибкой. Я выполнил все эти шаги, добавил путь к переменным окружения, скопировал все возможные каталоги dll в / php, / apache / bin, / system32, / syswow64 и т. Д., Но все равно получил эту ошибку.

Затем, проверив журнал ошибок apache, я заметил проблему с использованием скобок в пути.

PHP: синтаксическая ошибка, неожиданная '(' в C: \ Program Files (other) \ xampp \ php \ php.ini в строке 707 0 сертификат сервера НЕ включает идентификатор, который соответствует имени сервера

Если вы установили сервер в каталог «Program Files (x86)», та же ошибка может возникнуть из-за неэкранированных скобок.

Чтобы исправить это, откройте файл php.ini и найдите строку, содержащую «include_path», и заключите путь в двойные кавычки, чтобы исправить эту ошибку.

include_path = "C: \ Program Files (другое) \ xampp \ php \ PEAR"

person Ajay Singh    schedule 12.01.2019