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

PHP fread问题
EN

Stack Overflow用户
提问于 2010-10-15 22:25:33
回答 3查看 7.5K关注 0票数 3

在创建PHP telnet脚本以收集网络数据时,我遇到了一个问题。

因为从'Action: Status‘命令返回的数据量可以是任何大小...我担心在第13行使用带有fread()的静态数字。我也尝试使用fgets(),但它只获取第一行数据( META HTTP行...没有桌子)。如何使用PHP从套接字中获取任意数量的数据?请帮帮忙

代码语言:javascript
复制
<?php
$ami = fsockopen("192.100.100.180", 5038, $errno, $errstr);

if (!$ami) {
echo "ERROR: $errno - $errstr<br />\n";
} else {

    fwrite($ami, "Action: Login\r\nUsername: 1005\r\nSecret: password\r\nEvents: off\r\n\r\n");

    fwrite($ami, "Action: Status\r\n\r\n");
    sleep(1);

    $record = fread($ami,9999);#this line could over run!!!
    $record = explode("\r\n", $record);
    echo "<META HTTP-EQUIV=Refresh CONTENT=\"9\">"; #refresh page every 9 seconds
    echo "<table  border=\"1\">";


    foreach($record as $value){
        if(!strlen(stristr($value,'Asterisk'))>0
        && !strlen(stristr($value,'Response'))>0
        && !strlen(stristr($value,'Message'))>0
        && !strlen(stristr($value,'Event'))>0
        && strlen(strpos($value,' '))>0) #remove blank lines
        php_table($value);;
    }

    echo "</table>";

    fclose($ami);
    }


function php_table($value){
        $row1 = true;
        $value = explode(" ", $value);
        foreach($value as $field){
            if($row1){
                echo "<tr><td>".$field."</td>";
                $row1 = false;
            }
            else{
                echo "<td>".$field."</td></tr>";
                $row1 = true;
            }
        }
}

?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-15 22:28:49

代码语言:javascript
复制
while (strlen($c = fread($fp, 1024)) > 0) {
    $record .= $c;
}

HTTP:您的应用程序挂起,因为它没有关闭连接以表示请求的结束。试一试

代码语言:javascript
复制
fwrite($ami, "Action: Status\r\n\r\n"); 
fwrite($ami, "Connection: Close\r\n\r\n");
票数 4
EN

Stack Overflow用户

发布于 2010-10-15 22:29:29

代码语言:javascript
复制
$data = '';
while (!feof($ami)) {
  $data .= fread($ami, 1024);
}

或在php5中

代码语言:javascript
复制
$data = stream_get_contents($ami);
票数 4
EN

Stack Overflow用户

发布于 2010-10-15 22:29:42

只需使用循环并查找“文件的结尾”

代码语言:javascript
复制
$record = '';
while( !feof( $ami ) ) {
    $record .= fread($ami,9999);
}

您可能应该考虑使用较小的块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3943164

复制
相关文章

相似问题

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