首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP fopen forloops

PHP fopen forloops
EN

Stack Overflow用户
提问于 2012-11-07 14:36:43
回答 2查看 702关注 0票数 0

我不太确定为什么这不起作用,我试着用谷歌搜索,看看是否有答案,他们中的很多人想出了一个foreachloop而不是常规的for循环,有人能解释一下为什么这不起作用吗?

代码语言:javascript
复制
<?php
$list = array("GOOG", "AAP", "MSFT");

    for($i=0; $i<3; $i++)
    {
        echo "why isn't this working <br>";

        $fp = fopen ("http://finance.yahoo.com/d/quotes.csv?s=GOOG&f=sl1ve1x&e=.csv","r");
        $data = fgetcsv ($fp, 1000, ",");
        $exit = str_replace('"',"",$data[3]);
        $exchange = str_replace('"',"",$data[4]);

        echo "$data[0] <br>";
        echo "$data[1] <br>";
        echo "$data[2] <br>";

    }
?>

我希望它能打印3次google信息,但如果我自己打开它,它就不能打印3次,但如果我多次打印,它就不能做我所期望的任何事情

输出ex

代码语言:javascript
复制
why isn't this work
Goog
8398
789
why isn't this work
Goog
8398
789
why isn't this work
Goog
8398
789
EN

回答 2

Stack Overflow用户

发布于 2012-11-07 14:44:04

为什么不使用foreach呢?

代码语言:javascript
复制
<?php
$lists = array("GOOG", "AAP", "MSFT");

foreach($lists as $list)
{
    echo "<h3>Values for ".$list."</h3>";

    $fp = fopen ("http://finance.yahoo.com/d/quotes.csv?s=".$list."&f=sl1ve1x&e=.csv","r");
    $data = fgetcsv ($fp, 1000, ",");
    fclose($fp);

    echo $data[0]."<br/>",
         $data[1]."<br/>",
         $data[2]."<br/>";
}
/* Result
Values for GOOG
GOOG
681.72
1582936
Values for AAP
AAP
80.44
1306227
Values for MSFT
MSFT
29.86
43408272
*/
?>

编辑:

你可能还会感兴趣地知道,使用fopen进行循环大约比使用curl_multi慢4.6倍,因为curl multi会同时发出所有请求,结果如下:

简单卷曲多功能:

代码语言:javascript
复制
<?php
function curl_multi_get($data) {
    $curly = array();
    $result = array();

    $mh = curl_multi_init();
    foreach ($data as $id=>$d) {
        $curly[$id] = curl_init();
        curl_setopt($curly[$id], CURLOPT_URL,            'http://finance.yahoo.com/d/quotes.csv?s='.$d.'&f=sl1ve1x&e=.csv');
        curl_setopt($curly[$id], CURLOPT_HEADER,         0);
        curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curly[$id], CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curly[$id], CURLOPT_TIMEOUT,        30);
        curl_setopt($curly[$id], CURLOPT_AUTOREFERER,    true);
        curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, true);

        curl_multi_add_handle($mh, $curly[$id]);
    }
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while($running > 0);
    foreach($curly as $id => $c) {
        $result[$id] = curl_multi_getcontent($c);
        curl_multi_remove_handle($mh, $c);
    }
    curl_multi_close($mh);
    return $result;
}
?>

0.50315880775452秒内完成多次卷曲吗

代码语言:javascript
复制
<?php
//Benchmark test 1 curl_multi
$time_start = microtime(true);
//---------------------------------------

$lists  = array("GOOG", "AAP", "MSFT");
$result = curl_multi_get($lists);

foreach($result as $data)
{
    $data = explode(',',$data);

    echo "<h3>Values for ".$data[0]."</h3>";

    echo $data[0]."<br/>",
         $data[1]."<br/>",
         $data[2]."<br/>";
}

//--------------------------------------
$time_end = microtime(true);
$time = $time_end - $time_start;

echo "Did Curl multi in $time seconds\n";
//end first test
//Did Curl multi in 0.50315880775452 seconds
?> 

2.3253791332245秒内完成了fopen()

代码语言:javascript
复制
<?php
//Benchmark test 2 fopen()
$time_start = microtime(true);
//--------------------------------------

$lists = array("GOOG", "AAP", "MSFT");
foreach($lists as $list)
{
    echo "<h3>Values for ".$list."</h3>";

    $fp = fopen ("http://finance.yahoo.com/d/quotes.csv?s=".$list."&f=sl1ve1x&e=.csv","r");
    $data = fgetcsv ($fp, 1000, ",");
    fclose($fp);

    echo $data[0]."<br/>",
         $data[1]."<br/>",
         $data[2]."<br/>";
}

//--------------------------------------
$time_end = microtime(true);
$time = $time_end - $time_start;

echo "Did fopen() in $time seconds\n";
//end second test
//Did fopen() in 2.3253791332245 seconds 
?>

希望能有所帮助

票数 2
EN

Stack Overflow用户

发布于 2013-04-26 08:53:16

代码语言:javascript
复制
$lists  = array("GOOG", "AAP", "MSFT");
$result = curl_multi_get($lists);

foreach($result as $data)
{
    $data = explode(',',$data);

    echo "<h3>Values for ".$data[0]."</h3>";

    echo $data[0]."<brtextmessagedfghjkljhgfdsadfghjkkjhgfdsasdfghjklkjhgfdsasdfghjkkjhgfdsasdfghjkjhgfdsdfghjkkjhgfdsdfghjm,.,mnbvcxsdfghjklkjhgfdsdfghjkllkjhgfdsa/>",
         $data[1]."<br/>",
         $data[2]."<br/>";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13264373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档