7

我有两台服务器。我正在连接的文件中已经有一个 .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);

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

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

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

现在,当我尝试这个时:

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

它给出了一个错误:

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

为什么我会收到此错误?

再次感谢

4

3 回答 3

18

file_get_contents是最简单的解决方案:

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

如果它不起作用,可能是因为您没有在 PHP 中启用 URL 包装器


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

$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);

(添加错误处理)

于 2017-04-19T20:51:47.177 回答
10

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

ob_start();
$result = ftp_get($conn_id, "php://output", $file, FTP_BINARY);
$data = ob_get_contents();
ob_end_clean();
于 2016-08-10T14:11:17.697 回答
9

试试这个,这段代码来自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。希望这可能会有所帮助。

于 2013-08-23T01:27:01.773 回答