【问题标题】:Using FTP to read a .log file and display content [duplicate]使用 FTP 读取 .log 文件并显示内容 [重复]
【发布时间】:2022-01-22 23:13:30
【问题描述】:

所以我制作了一个 FTP 服务器,我可以将文件上传到它。但现在我想显示一个.log 文件内容(纯文本),但我似乎无法理解应该如何完成。

我用这个函数做了一个类,可以看到上传的文件存在,但是如何打印4404.log的内容呢?

function FTP_read(){
    ob_end_flush();
    $conn_id = ftp_connect($this->ftp_server);

    $login_result = ftp_login($conn_id, $this->ftp_user_name, $this->ftp_user_pass);
    // get contents of the current directory
    $contents = ftp_nlist($conn_id, ".");

    // output $contents
    var_dump($contents);
}

我以为我可以使用ftp_get(),但为什么我必须写入另一个文件?

ftp_get() retrieves a remote file from the FTP server, and saves it into a local file.

预计会得到这样的东西(打印日志内容):

【问题讨论】:

  • 关于你为什么要写作的问题。这就是 FTP 的工作原理,例如,如果您使用 Filezilla,它会创建一个临时文件并将内容写入文件以读取它。你可以做类似的事情。使用 tmpfile() 创建一个临时文件,然后下载内容并写入其中,然后输出所有内容并删除文件
  • @VitalijMik + CBroe – 这都不意味着您必须将内容下载到物理本地文件,如果您不需要的话。完全可以使用 FTP 将远程文件内容仅下载到本地内存。
  • @MartinPrikryl 是的,这行得通,但是否可以逐行阅读,而不是在一行中全部转储?
  • 它不会“在一行中全部转储”。无论如何,你的目标是什么?您只是在问如何将内容拆分为单独的行吗?还是您问是因为内容太大而无法放入内存,所以您必须逐行处理?您的问题询问如何打印内容。如果您有更具体的需求,您应该相应地编辑您的问题。
  • @MartinPrikryl 现在文件不是太大,但我不知道它们是否会在功能中。但是日志中的每一行都包含不同的信息,比如每 10 行可能是DEBUG...,所以我想要逐行的文件,所以我以后要在日志上创建一些 JS 行过滤时有更多的控制权,因此可以从文本等中隐藏所有 DEBUG... 行。

标签: php ftp


【解决方案1】:

创建了一个连接,并打开了一个php://temp 文件,然后使用ftp_fget(...) 写入该文件。然后$h 文件有了内容,所以我只需要逐行遍历该文件,这似乎可行。

function FTP_read(){
    ob_end_flush();
    $conn_id = ftp_connect($this->ftp_server);

    $login_result = ftp_login($conn_id, $this->ftp_user_name, $this->ftp_user_pass);

    ftp_pasv($conn_id, true);

    $h = fopen('php://temp', 'r+');

    ftp_fget($conn_id, $h, '4404.log', FTP_BINARY, 0);

    fseek($h, 0);

    while(!feof($h)) {
        $line = fgets($h);
        echo "$line"."<br>";
    }

    fclose($h);
    ftp_close($conn_id);
}

【讨论】:

  • 你可以用我的原始代码和echo nl2br($contents)来达到同样的效果。
  • @MartinPrikryl Awsome 你是对的 :)
猜你喜欢
  • 2020-05-02
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多