0

我对php很陌生。我真的很感谢这里的所有帮助。

我正在使用 sftp 登录服务器并获取文件。我只对该文件的最后一行感兴趣。最后一行由制表符分隔。我想将 15、16、19 和 20 以及 21st col 值存储到 5 个不同的变量中。最后一行如下所示:

7   1   0   59422170     306669 20188 20386     0     0 39787  59981  2014  67796 48953  2  7 90  1  1.81  11.3 12:19:50

当我发出此 cCurl 命令获取文件时,我将如何读取此文件中的最后一行并解析最后一行中的某些列?

<?php
$user="user";
$pass="pass";
$c = curl_init("sftp://$user:$pass@server1/vmstat");
curl_setopt($c, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($c);
curl_close($c);
#echo $data;

?>
4

3 回答 3

1
$data = explode("\n", $data);
$last_line = end($data);
$parts = explode("\t", $last_line);
于 2013-06-11T19:16:27.700 回答
0

为什么要使用 php?

带输入文件:

7   1   0   59422170     306669 20188 20386     0     0 39787  59981  2014  67796 48953  2  7 90  1  1.81  11.3 12:19:50

和命令行:

tail -n1 myfile | sed 's/\s\s*/ /g' | cut -d' ' -f15,16,19,20,21

结果是:

2 7 1.81 11.3 12:19:50
于 2013-06-11T19:26:25.183 回答
0

最后一行

如果文件很小,可能会矫枉过正,但前段时间写了这个函数。返回文件/流的最后 n 行。

function tail($file, $lines = 10, $buffer = 4096)
{
        if(is_resource($file) && (get_resource_type($file) == 'file' || get_resource_type($file) == 'stream'))
                $f = $file;
        elseif(is_string($file))
                $f = fopen($file, 'rb');
        else
                throw new Exception('$file must be either a resource (file or stream) or a filename.');

        $output = ''; 
        $chunk = '';

        fseek($f, -1, SEEK_END);

        if(fread($f, 1) != "\n")
                $lines -= 1;

        while(ftell($f) > 0 && $lines >= 0)
        {
                $seek = min(ftell($f), $buffer);
                fseek($f, -$seek, SEEK_CUR);

                $output = ($chunk = fread($f, $seek)).$output;
                fseek($f, -mb_strlen($chunk, '8bit'), SEEK_CUR);
                $lines -= substr_count($chunk, "\n");
        }

        while($lines++ < 0)
                $output = substr($output, strpos($output, "\n")+1);

        fclose($f); 
        return $output; 
}

如果制表符分隔,只需进行拆分并将您想要的变量分配给变量。

$columns = explode("\t",$line);

$foo = $columns[15];
...
于 2013-06-11T19:39:08.163 回答