OpenSSL включен, но не работает - PullRequest
4 голосов
/ 26 декабря 2009

Я использую Apache 2.2.13 и PHP 5.2.12. Просто установил PHP 5.2.12 вручную (чтобы иметь доступ ко всем расширениям) и включил OpenSSL. phpinfo () указывает, что OpenSSL включен и работает OpenSSL 0.9.8k 25 марта 2009 г.

Я получаю эту ошибку: Фатальная ошибка PHP: вызов неопределенной функции ftp_ssl_connect ().

Я видел, где в руководстве по PHP указано, что «ftp_ssl_connect () доступен только в том случае, если и модуль ftp, и поддержка OpenSSL встроены статически в php» и далее говорится, что «вы должны скомпилировать свои собственные двоичные файлы PHP», чтобы сделать его работа с Windows.

У меня есть подозрение, что phpinfo () указывает только на то, что OpenSSL включен, потому что я раскомментировал строку extension = php_openssl.dll и у меня есть правильные dll в правильных папках и правильный путь в переменных среды. И, возможно, статическая сборка в PHP должна выполняться независимо от того, что указывает phpinfo ().

Я полагаю, что цель распространения (как описано выше) для динамических расширений, но перекомпиляция (для OpenSSL) заключается в кодировании статического расширения.

Расширение ftp работает нормально (встроено в PHP 5.2). Я проверяю это с помощью следующего кода:

$ conn_id = ftp_connect ($ url); $ login_result = ftp_login ($ conn_id, $ username, $ password); ftp_close ($ conn_id);

Обратите внимание, что для проверки ssl я изменяю только ftp_connect на ftp_ssl_connect. При достижении этой строки я получаю ошибку PHP выше в моем файле журнала ошибок Apache.

1 Ответ

4 голосов
/ 26 декабря 2009

Как указано в документации (цитируя то, что вы уже цитировали) :

Примечание: почему эта функция может не существовать
ftp_ssl_connect() только доступно, если оба модуля ftp и поддержка OpenSSL встроена статически в php, это означает, что на винде эта функция будет undefined в официальных сборках PHP.
Чтобы сделать эту функцию доступной в Windows вы должны скомпилировать свой собственный Двоичные файлы PHP.

Вы говорите, что установили PHP "вручную"; но это, вероятно, все еще означает, что вы использовали "официальную" сборку с php.net - что означает, что вы не скомпилировали свои собственные двоичные файлы PHP ... Итак, эта функция недоступна.


В этом нет ничего волшебного: кажется, вам придется перекомпилировать PHP, используя правильные параметры конфигурации во время компиляции, если вы хотите использовать эту функцию ...

Вот некоторая документация по этому поводу: Создайте свой собственный PHP на Windows - но ... удачи ... я никогда не слышал, что на самом деле "просто" скомпилировать PHP на Windows (это не так сложно для Linux, но Linux, возможно, немного лучше подходит для компиляции)


Пара других решений:

  • переход на Linux для ваших разработок (даже если он использует только виртуальную машину) - но вам, возможно, все равно придется перекомпилировать PHP, чтобы получить (может быть не включено по умолчанию)
  • просто не использовал эту функцию; в конце концов, знаете ли вы, если ваш хостинг предоставит вам это? (Если вы не можете использовать его на своем производственном сервере, нет необходимости использовать его на компьютере для разработки / тестирования)
...