【问题标题】:PHP: How do I read a .txt file from FTP server into a variable?PHP:如何将 .txt 文件从 FTP 服务器读取到变量中?
【发布时间】:2013-08-25 21:14:05
【问题描述】:

我有两台服务器。我正在连接的文件中已经有一个 .txt 文件。

我需要获取 .txt 文件内容并将它们放入 $ 变量中。这是我的代码 不工作:

$ftp_server = $_POST["site"];
$path = $_POST["path"];
$ftp_user_name = $_POST["username"];
$ftp_user_pass = $_POST["pass"];

// set up basic connection
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

ftp_get($conn_id, $content,"/" . $_POST["path"] . "/" . "#" . $result["id"]
. " - " .    $result["LastName"] . ", " . $result["FirstName"] . "/" . $_POST["title"] . ".txt", FTP_ASCII);

这段代码连接到 FTP,我使用 ftp_get 从一个文本文件复制到一个名为 $content 的变量。我知道一个变量不属于这个参数,但我现在被卖掉了。我不知道如何阅读这个 .txt 文件。

有没有办法用 PHP FTP 函数做到这一点?

谢谢

现在,当我尝试这个时:

$fileContents = file_get_contents('ftp://username:pa‌​ssword@hostname/path/to/file');

它给出 550 错误,说明 .txt 文件不是常规文件。为什么会出现此错误?

再次感谢

这是我得到的官方错误:

警告:fopen(ftp://...@goldenbooklet.com/101Notebook 备份:22-08-2013/#11 - Cappucci,Ryan/queen.txt)[function.fopen]:无法打开流:FTP 服务器报告 550 /101 笔记本备份:22- 08-2013/:不是第 269 行 /home/content/34/11614434/html/adminpdo.php 中的常规文件

【问题讨论】:

    标签: php ftp


    【解决方案1】:

    file_get_contents 是最简单的解决方案:

    $contents = file_get_contents('ftp://username:pa‌​ssword@hostname/path/to/file');
    

    如果不起作用,可能是因为你没有URL wrappers enabled in PHP


    如果您需要更好地控制读取(传输模式、被动模式、偏移量、读取限制等),请使用 ftp_fgetphp://temp (or the php://memory) stream 的句柄:

    $conn_id = ftp_connect('hostname');
    
    ftp_login($conn_id, 'username', 'password');
    
    ftp_pasv($conn_id, true);
    
    $h = fopen('php://temp', 'r+');
    
    ftp_fget($conn_id, $h, '/path/to/file', FTP_BINARY, 0);
    
    $fstats = fstat($h);
    fseek($h, 0);
    $contents = fread($h, $fstats['size']); 
    
    fclose($h);
    ftp_close($conn_id);
    

    (添加错误处理)

    【讨论】:

    • 正确答案!
    【解决方案2】:

    如果您已经通过 ftp_connect 打开了连接,这可能是最好的答案:

    ob_start();
    $result = ftp_get($conn_id, "php://output", $file, FTP_BINARY);
    $data = ob_get_contents();
    ob_end_clean();
    

    【讨论】:

      【解决方案3】:

      试试这个,这段代码来自http://www.php.net/manual/en/function.fread.php

      <?
      $filename = "ftp://username:pa‌​ssword@hostname/path/to/file";
      $handle = fopen($filename, "r");
      $contents = fread($handle, filesize($filename));
      fclose($handle);
      
      echo $contents;
      ?>
      

      如果出错,请将文件权限更改为777或775。希望这可能会有所帮助。

      【讨论】:

      • 我在尝试时仍然收到错误消息。我发布了上面的错误。
      • 上面的代码适用于普通的 .txt 文件。您要读取的文件是否可能不是文件(根据您的链接,看起来您正在尝试读取文件夹)或者可能是 .php 或 .aspx 文件?如果是这样,您将无法获取该 .php 文件。
      • 是的,它是一个 txt 文件,但由于某种原因,无论我尝试什么,我仍然得到错误。
      • 请阅读这篇文章>>support.ipswitch.com/kb/WS-20000817-DM02.htm这是关于错误550。可能不是编码问题。
      • 您收到此错误是因为您尝试从流中读取,并且在数据包可用时停止读取。请注意,数据流是以数据包的形式发送的。为此,您需要以下内容:&lt;? $filename = "ftp://username:pa‌​ssword@hostname/path/to/file"; $handle = fopen($filename, "rb"); $contents = stream_get_contents($handle); fclose($handle); echo $contents; ?&gt;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2021-08-10
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多