За последние 24 часа нас посетили 18026 программистов и 1675 роботов. Сейчас ищут 1117 программистов ...

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

Тема в разделе "Установка PHP", создана пользователем btsalex, 26 фев 2009.

  1. btsalex

    btsalex Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте

    Пытаюсь решить уже несколько дней проблему - не работает 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) - везде работает без проблем.

    Параметры сборки php:
    './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'

    PHP:
    1.  
    2. (
    3.     [0] => libxml
    4.     [1] => xmlrpc
    5.     [2] => xml
    6.     [3] => session
    7.     [4] => sockets
    8.     [5] => standard
    9.     [6] => Reflection
    10.     [7] => mysqli
    11.     [8] => mysql
    12.     [9] => mime_magic
    13.     [10] => mcrypt
    14.     [11] => mbstring
    15.     [12] => json
    16.     [13] => iconv
    17.     [14] => gettext
    18.     [15] => gd
    19.     [16] => ftp
    20.     [17] => exif
    21.     [18] => dom
    22.     [19] => dba
    23.     [20] => date
    24.     [21] => curl
    25.     [22] => ctype
    26.     [23] => bcmath
    27.     [24] => zlib
    28.     [25] => pcre
    29.     [26] => openssl
    30.     [27] => cgi-fcgi
    31.     [28] => Zend Optimizer
    32. )
    33.  
    34. (
    35.     [0] => Zend Extension Manager
    36.     [1] => Zend Optimizer
    37. )
    38.  
    39. (
    40.     [version_number] => 463360
    41.     [age] => 3
    42.     [features] => 540
    43.     [ssl_version_number] => 0
    44.     [version] => 7.18.0
    45.     [host] => amd64-portbld-freebsd7.0
    46.     [ssl_version] => OpenSSL/0.9.8j
    47.     [libz_version] => 1.2.3
    48.     [protocols] => Array
    49.         (
    50.             [0] => tftp
    51.             [1] => ftp
    52.             [2] => telnet
    53.             [3] => dict
    54.             [4] => http
    55.             [5] => file
    56.             [6] => https
    57.             [7] => ftps
    58.         )
    59. )
    Полноценный Reproduce code:
    <?php
    ini_set("error_reporting", E_ALL);
    ini_set("display_errors", "1");
    echo file_get_contents("https://money.yandex.ru");
    ?>

    Может кто что подскажет?
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну и дергай курлом. че огород-то городить?
     
  3. btsalex

    btsalex Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    4
    Симпатии:
    0
    Какой огород?

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

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    btsalex

    1. я пишу всегда сто-то типа MyGetUrl() и там рулю чем кого вызывать.
    2. что ты такого дергашь если у тебя так много вызовов?
     
  5. btsalex

    btsalex Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    4
    Симпатии:
    0
    1. замечательно
    2. не суть, код не мой вовсе

    Я прошу помочь разрулить конкретную проблему, а не учить как кто реализует подобные вещи и чем нужно/можно пользоваться.

    Дело не в том, какими еще способами можно получить данные. file_get_contents() - стандартная функция, я хочу чтобы она работала.
    Если echo вдруг работать не будет, Вы мне print посоветуете юзать?

    Если нечем помочь по теме, огромная просьба - не захламляйте.
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    В php-cli поведение такое же?
     
  7. btsalex

    btsalex Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    4
    Симпатии:
    0
    Sergey89
    В cli тот же скрипт отрабатывает корреткно!