PHP-fpm и HTTPS - крайне странное поведение

btsalex

Новичок
PHP-fpm и HTTPS - крайне странное поведение

Здравствуйте

Пытаюсь решить уже несколько дней проблему - не работает file_get_contents("https://.....");
При этом с http работает прекрасно, а CURL работает без проблем и с http и с https

При попытке получить любую httpS страницу с помощью file_get_contents() получаю ошибки:
Warning: file_get_contents() [function.file-get-contents]: SSL: Unknown error: 0 in /www/1.php on line 8
Warning: file_get_contents() [function.file-get-contents]: Failed to enable crypto in /www/1.php on line 8
Warning: file_get_contents(https://money.yandex.ru) [function.file-get-contents]: failed to open stream: operation failed in /www/1.php on line 8

На сервере php-fpm 5.2.8 (OpenSSL/0.9.8j и mcrypt 2.5.8), nginx 0.6.32, ОС FreeBSD 7.0-RELEASE-p5


Самое интересное, как оно работает..

в 1.php - запрашиваю сайт с помощью file_get_content()
в 1curl.php - запрашиваю сайт с помощью CURL

после рестарта php:
1.php - вообще не работает (ошибки описаны выше - SSL: Unknown error: 0 и Failed to enable crypto)

далее, запускаю 1curl.php - все ок, CURL отрабатывает
после этого 1.php - работает Четко через 2 раза (прямо четко 2 попытки неудачные, 3яя - удачная. не зависит от времени между запросами!)

если после этого запустить 1curl.php еще раз, то 1.php - работает теперь Четко через 1 раз (прямо четко уже 2 попытки удачные, а 3яя - неудачная. не зависит от времени между запросами!) т.е. добавляется еще одна удачная попытка из 3ех

последующие запуски 1curl.php ситуацию не меняют

эксперимент показал, что такое поведение только в случае, если я запрашиваю CURL'ом любую https страницу, если запрашивать http, то 1.php как не работал, так и продложает не работать
такой вот бред

Поиск по-сути ничего не дал, разве что нашел близкую проблему в http://bugs.php.net/bug.php?id=44353 , но решения там нет

Тестил этот же код на нескольких других серверах, причем на одном установлено все практически 1 в 1 (тот же php-fpm, только версия FreeBSD чуть новее - 7.1-RELEASE-p2) - везде работает без проблем.


Может кто что подскажет?
 

fixxxer

К.О.
Партнер клуба
А чем не устраивает curl?
А вообще забавно.... Покажи параметры сборки php. Если вдруг с thread safety - пересобери без. Еще пробуй выбрасывать suhosin, zend optimizer и акселераторы, если таковые в наличии.
 

btsalex

Новичок
CURL устраивает полностью, но есть много кода, который использует file_get_contents() и хочется, чтобы стандартная функция работала как следует

Thread Safety - disabled

параметры
'./configure' '--prefix=/usr/local/php' '--includedir=/usr/local/php/include' '--disable-debug' '--disable-all' '--disable-ipv6' '--with-layout=GNU' '--enable-fastcgi' '--enable-fpm' '--enable-bcmath' '--enable-ctype' '--with-curl=/usr/local/bin/' '--enable-dba' '--enable-dom' '--enable-exif' '--enable-ftp' '--with-gettext=/usr/local' '--with-gd' '--with-freetype-dir=/usr/local/lib' '--with-t1lib=/usr/local/lib' '--with-xpm-dir=/usr/local/lib' '--with-jpeg-dir=/usr/local' '--with-ttf' '--with-iconv' '--enable-libxml' '--with-libxml-dir=/usr/local' '--enable-mbstring' '--with-mime-magic' '--with-mysql=/usr/local/lib/mysql' '--with-mysqli' '--with-mcrypt' '--enable-force-cgi-redirect' '--enable-discard-path' '--enable-reflection' '--enable-sockets' '--enable-session' '--enable-magic-quotes' '--with-pcre-regex' '--with-regex=php' '--enable-xml' '--enable-json' '--with-pear' '--with-zlib' '--with-zlib-dir=/usr/lib' '--with-zend-vm=CALL' '--enable-zend-multibyte' '--with-xmlrpc' '--with-openssl=/usr/local'

стоит suhosin и zend optimizer
на аналогичном сервере устаовлен suhosin и eAccelerator - все ок
zend optimizer я тоже думаю тут не причем
 

fixxxer

К.О.
Партнер клуба
ага.. гм. еще кинь, что выводит

<pre><?
print_r(get_loaded_extensions());
print_r(get_loaded_extensions(true));
print_r(curl_version());
?>
 

btsalex

Новичок
PHP:
Array
(
    [0] => libxml
    [1] => xmlrpc
    [2] => xml
    [3] => session
    [4] => sockets
    [5] => standard
    [6] => Reflection
    [7] => mysqli
    [8] => mysql
    [9] => mime_magic
    [10] => mcrypt
    [11] => mbstring
    [12] => json
    [13] => iconv
    [14] => gettext
    [15] => gd
    [16] => ftp
    [17] => exif
    [18] => dom
    [19] => dba
    [20] => date
    [21] => curl
    [22] => ctype
    [23] => bcmath
    [24] => zlib
    [25] => pcre
    [26] => openssl
    [27] => cgi-fcgi
    [28] => Zend Optimizer
)
Array
(
    [0] => Zend Extension Manager
    [1] => Zend Optimizer
)
Array
(
    [version_number] => 463360
    [age] => 3
    [features] => 540
    [ssl_version_number] => 0
    [version] => 7.18.0
    [host] => amd64-portbld-freebsd7.0
    [ssl_version] => OpenSSL/0.9.8j
    [libz_version] => 1.2.3
    [protocols] => Array
        (
            [0] => tftp
            [1] => ftp
            [2] => telnet
            [3] => dict
            [4] => http
            [5] => file
            [6] => https
            [7] => ftps
        )

)
 

fixxxer

К.О.
Партнер клуба
>> [28] => Zend Optimizer

А если выбросить вот это и suhosin, воспроизводится?
 

btsalex

Новичок
Ок, попробую завтра и напишу результат, но Zend Optimizer в любом случае необходим, да и suhosin на другом сервере не мешает
 

fixxxer

К.О.
Партнер клуба
'--with-openssl=/usr/local'

а что это за путь к openssl такой интересный? Системный на freebsd в /usr лежит. Может, в этом причина?
 

btsalex

Новичок
это уже внешнюю либу OpenSSL попробовали поставить, до этого была системная
 

fixxxer

К.О.
Партнер клуба
у меня с системной не воспроизводится.

PHP:
Array
(
    [version_number] => 463618
    [age] => 3
    [features] => 540
    [ssl_version_number] => 0
    [version] => 7.19.2
    [host] => amd64-portbld-freebsd7.1
    [ssl_version] => OpenSSL/0.9.8e
    [libz_version] => 1.2.3
    [protocols] => Array
        (
            [0] => tftp
            [1] => ftp
            [2] => telnet
            [3] => dict
            [4] => http
            [5] => file
            [6] => https
            [7] => ftps
        )

)
Может там еще что то делается такое хитрое? Закинь код на http://pastebin.ru/
 

fixxxer

К.О.
Партнер клуба
а.. ну я так и делаю. странно. таки попробуй вынести поочередно suhosin и zo - если сработает - по крайней мере, будет ясно, кого пинать =)
 

MiksIr

miksir@home:~$
Трейсить пробовали? Что там на фре... ktrace что ли....
Может трейс на какую мысль натолкнет
 

btsalex

Новичок
Вообщем, поочередная сборка без suhosin и Zend Optimizer ничего не дала

Начали ставить разные версии сборок - заработало, вернули обратно старую сборку - тоже работает..

Не знаю, что это было, но я рад, что теперь все ок =)

Еще характерная особенность - почему-то в phpinfo() не было логотипов ни php, ни zend'а. Не знаю, связано это или нет, но теперь и логотипы появились =)

Кстати, отходя от темы - никто не знает, как отключить возможность увидеть логотип того же zend'а вместо результатов исполнения скрипта, добавив к адресу файла ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 ? Т.е. чтобы такие выпады просто игнорировались
 

fixxxer

К.О.
Партнер клуба
expose_php

-~{}~ 20.02.09 08:44:

>>Не знаю, что это было
а что нить изменилось в print_r(curl_version()); ?
 

btsalex

Новичок
Нет, все то же самое

-~{}~ 20.02.09 12:47:

expose_php - не то, все равно при добавлении ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 вижу лого zend'а
 

fixxxer

К.О.
Партнер клуба
не верю! причем в обоих случаях, только если в первом это явно Девид Блейн поучаствовал, то во втором не должно просто так быть)
 

fixxxer

К.О.
Партнер клуба
да. у меня стоит expose_php Off. логотипа нет

хотя не исключаю что это zend optimizer такой умный - я такого не держу просто - проверить негде
 

btsalex

Новичок
Да, действительно, я почему-то решил, что в On надо ставить
Теперь все просто замечательно =)

-~{}~ 26.02.09 01:53:

Рано радовался..

Ситуация на самом деле не изменилась, просто в новом php.ini display_errors = Off, соответсвенно ошибок и не было в браузере

-~{}~ 26.02.09 02:59:

Полноценный Reproduce code:
<?php
ini_set("error_reporting", E_ALL);
ini_set("display_errors", "1");
echo file_get_contents("https://money.yandex.ru");
?>

-~{}~ 27.02.09 00:31:

Автор оригинала: MiksIr
Трейсить пробовали? Что там на фре... ktrace что ли....
Может трейс на какую мысль натолкнет
Трассировку я сделал, но, честно говоря, не силен в разборе результатов :(
http://slil.ru/27003300 - файл с результатами трассировки, запуск тестового скрипта был выполнен ближе к концу, в конце был рестарт php-fpm

-~{}~ 27.02.09 11:06:

В cli тот же скрипт отрабатывает корреткно!
 
Сверху