fopen () дает сбой спорадически - PullRequest
1 голос
/ 04 ноября 2011

Я знаю, что ошибки fopen () подробно обсуждались здесь, но, похоже, у моей проблемы есть уникальная особенность: fopen () может произойти сбой, может быть один из четырех раз, в другой раз он работает отлично , Я получаю следующую ошибку:

Warning: fopen(http://download.finance.yahoo.com/d/quotes.csv?s=0005.HK&f=nl1c1p2v&e=.csv)
[function.fopen]: failed to open stream: HTTP request failed! in [...] on line 4

Тот факт, что это не происходит систематически, исключает большинство проблемных источников на стороне хост-сервера. Может ли это быть из-за сервера, с которого я работаю, Yahoo Finance?

1 Ответ

1 голос
/ 04 ноября 2011

Используйте вместо этого curl lib.http://php.net/manual/en/book.curl.php

function get_cURL($p_url)
{


    $ch = curl_init($p_url);

    $agent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3";
    $header[0] = "Accept: text/xml,text/csv,application/xhtml+xml,"; 
    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
    $header[] = "Cache-Control: max-age=0"; 
    $header[] = "Connection: keep-alive"; 
    $header[] = "Keep-Alive: 300"; 



    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    // grab URL and pass it to the browser
    curl_setopt($ch, CURLOPT_URL, $p_url);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);





    $buffer = curl_exec($ch);
    $this->info = curl_getinfo($ch);
    $this->error = curl_error($ch);

    curl_close($ch);

return $buffer;
}
...