使用curl替代fgetcsv的fopen文件资源

Lou*_*nda 7 php fopen curl fgetcsv

是否可以进行curl,访问URL和结果作为文件资源?喜欢fopen怎么做.

我的目标:

  1. 解析CSV文件
  2. 将它传递给fgetcsv

我的阻挠:fopen被禁用了

我的一大堆代码(fopen)

$url = "http://download.finance.yahoo.com/d/quotes.csv?s=USDEUR=X&f=sl1d1t1n&e=.csv";
$f = fopen($url, 'r');
print_r(fgetcsv($f));
Run Code Online (Sandbox Code Playgroud)

然后,我正在尝试卷曲.

$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($curl, CURLOPT_URL, $url);
$content = @curl_exec($curl);
curl_close($curl);
Run Code Online (Sandbox Code Playgroud)

但是,像往常一样.$ content已经返回一个字符串.

现在,curl有可能将其作为文件资源指针返回吗?就像fopen一样?使用PHP <5.1.x的东西.我的意思是,不使用str_getcsv,因为它只有5.3.

我的错误

警告:fgetcsv()期望参数1是资源,给定布尔值

谢谢

Dav*_*dom 11

假设由fopen is disabled你的意思是" allow_url_fopen无效"的组合CURLOPT_FILE,并php://temp让这相当容易:

$f = fopen('php://temp', 'w+');

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FILE, $f);
// Do you need these? Your fopen() method isn't a post request
// curl_setopt($curl, CURLOPT_POST, true);
// curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_exec($curl);
curl_close($curl);

rewind($f);

while ($line = fgetcsv($f)) {
  print_r($line);
}

fclose($f);
Run Code Online (Sandbox Code Playgroud)

基本上,这会创建一个指向"虚拟"文件的指针,而cURL会将响应存储在其中.然后你只需将指针重置为开头,可以将其视为像往常一样打开它fopen($url, 'r');