@jennik

Почему file_get_contents зависает, не возвращая результат или ошибку?

Всем доброго времени суток!
Проблема в следующем:
есть php код:
$url = 'https://www.topnotchinc.com/MyAccount/AccountHome.aspx';
$html = file_get_contents($url, false, stream_context_create(array(
    'http' => array(
    	'method'  => 'GET',
        'header'  => 'Cookie: ' . $this->cookies //тут просто строка с куками
    ),
    'ssl' => array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
       )
)));

Этот код отрабатывает много раз нормально, а на много раз + 1 тупо зависает.
Процесс висит в состоянии S вот уже третий час:
$ ps -F 16724
UID        PID  PPID  C    SZ   RSS PSR STIME TTY      STAT   TIME CMD
parser2  16724     1  0 79404 73108   5 Aug10 ?        S     21:55 php -q parser5_tnd.php

$ netstat -an | grep 144.202.201.11
tcp        0      0 (ip сервера, на котором запущен скрипт):43877         144.202.201.11:443          ESTABLISHED

т.е. соединение не отключается по таймауту вот уже три часа, таймаут установлен:
$ cat /etc/php.ini | grep default_socket_timeout
default_socket_timeout = 60

При помощи gdb, удалось увидеть стек:
(gdb) bt
#0  0x00007f7c7b396740 in __read_nocancel () from /lib64/libpthread.so.0
#1  0x0000003a7e2de041 in ?? () from /usr/lib64/libcrypto.so.10
#2  0x0000003a7e2dc399 in BIO_read () from /usr/lib64/libcrypto.so.10
#3  0x0000003a7e62beff in ssl3_read_n () from /usr/lib64/libssl.so.10
#4  0x0000003a7e62c69c in ssl3_read_bytes () from /usr/lib64/libssl.so.10
#5  0x0000003a7e627ec0 in ?? () from /usr/lib64/libssl.so.10
#6  0x00000000004818a8 in php_openssl_sockop_read (stream=0x25b80d0, buf=0x3a22a48 "8*\242\003", count=<value optimized out>, tsrm_ls=0x21cfc40)
    at /root/rpmbuild/SOURCES/php-5.6.0/ext/openssl/xp_ssl.c:1810
#7  0x00000000007ff3ef in php_stream_fill_read_buffer (stream=0x25b80d0, size=126, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/main/streams/streams.c:692
#8  0x000000000080014e in _php_stream_get_line (stream=0x25b80d0, buf=0x7fff4216f2b0 "", maxlen=127, returned_len=0x7fff4216f348, tsrm_ls=0x21cfc40)
    at /root/rpmbuild/SOURCES/php-5.6.0/main/streams/streams.c:975
#9  0x00000000007938b7 in php_stream_url_wrap_http_ex (wrapper=0x11040a0, path=0x7fff4216f348 "\230%p\002", mode=0xd78bac "rb", options=0, opened_path=0x0, 
    context=<value optimized out>, redirect_max=<value optimized out>, flags=1, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/ext/standard/http_fopen_wrapper.c:683
#10 0x0000000000796482 in php_stream_url_wrap_http (wrapper=<value optimized out>, path=<value optimized out>, mode=<value optimized out>, options=<value optimized out>, 
    opened_path=<value optimized out>, context=<value optimized out>, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/ext/standard/http_fopen_wrapper.c:951
#11 0x00000000007fe91b in _php_stream_open_wrapper_ex (path=0x2702598 "https://www.topnotchinc.com/MyAccount/AccountHome.aspx", mode=0xd78bac "rb", options=8, opened_path=0x0, 
    context=0x2f3e068, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/main/streams/streams.c:2064
#12 0x0000000000759c9f in zif_file_get_contents (ht=3, return_value=0x25ae908, return_value_ptr=<value optimized out>, this_ptr=<value optimized out>, 
    return_value_used=<value optimized out>, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/ext/standard/file.c:548
#13 0x000000000068caaf in phar_file_get_contents (ht=3, return_value=0x25ae908, return_value_ptr=0x7f7c7aa4fef8, this_ptr=0x0, return_value_used=1, tsrm_ls=0x21cfc40)
    at /root/rpmbuild/SOURCES/php-5.6.0/ext/phar/func_interceptors.c:225
#14 0x00000000008d995b in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/Zend/zend_vm_execute.h:558
#15 0x00000000008c803b in execute_ex (execute_data=0x7f7c7aa4fff0, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/Zend/zend_vm_execute.h:363
#16 0x000000000084ff87 in zend_execute_scripts (type=8, tsrm_ls=0x21cfc40, retval=0x0, file_count=3) at /root/rpmbuild/SOURCES/php-5.6.0/Zend/zend.c:1330
#17 0x00000000007e352b in php_execute_script (primary_file=0x7fff42172ca0, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/main/main.c:2584
#18 0x0000000000902924 in do_cli (argc=3, argv=0x21cfb30, tsrm_ls=0x21cfc40) at /root/rpmbuild/SOURCES/php-5.6.0/sapi/cli/php_cli.c:994
#19 0x00000000009031ad in main (argc=3, argv=0x21cfb30) at /root/rpmbuild/SOURCES/php-5.6.0/sapi/cli/php_cli.c:1378

т.е. зависает на вызове __read_nocancel(), но гугление почти ничего не дало по этому поводу.
Вопрос: в чем проблема и как ее победить? В какую сторону копать?
  • Вопрос задан
  • 1223 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы