curl — PHP fopen () и php: // память не работает должным образом (потеря данных)

В настоящее время я пытаюсь интегрировать класс, который использует fopen() с php://memory поток для захвата заголовков Curl. Существуют неизменно лучшие способы захвата заголовков Curl, но у меня недостаточно времени, чтобы написать свой собственный класс в данный момент.

Проблема в том, что информация заголовка не фиксируется. Код выглядит следующим образом:

    $response_headers_fh = fopen('php://memory', 'wb+');

$ch->setOpt(CURLOPT_WRITEHEADER, $response_headers_fh);

$ch->raw_response = curl_exec($ch->curl);

rewind($response_headers_fh);
$ch->raw_response_headers = stream_get_contents($response_headers_fh);
fclose($response_headers_fh);

На этом этапе, после запроса Curl, $ch->raw_response_headers свойство пусто Однако, если я укажу путь к файлу:

    $response_headers_fh = fopen('/tmp/random_string', 'wb+');

$ch->setOpt(CURLOPT_WRITEHEADER, $response_headers_fh);

$ch->raw_response_headers свойство установлено правильно …

Наша версия PHP:

$ php -v
PHP 5.3.3 (cli) (built: Sep 10 2014 07:51:23)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

Вид тупого …

1

Решение

Вполне вероятно, что curl не может писать в php://memory поток. Есть старый сообщение об ошибке это кажется неразрешенным до сих пор. Но вы можете использовать CURLOPT_HEADERFUNCTION-опция для захвата заголовка вместо:

function MyHeaderFunction($ch, $header)
{
echo 'Header = ' . $header;
return strlen($header);
}

$ch->setopt(CURLOPT_HEADERFUNCTION, 'MyHeaderFunction');

curl_exec($ch->curl);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]