gpt4 book ai didi

php - 运行脚本时无法从 FTP 服务器自动下载文件

转载 作者:行者123 更新时间:2023-11-30 17:55:34 25 4
gpt4 key购买 nike

我正在尝试编写一个 PHP 页面,该页面采用 GET 变量(FTP 中的文件名)并下载它。但是,它似乎不起作用。函数本身 (ftp_get) 在运行 echo 语句时返回 TRUE,但是没有其他任何事情发生,控制台中也没有错误。

<?php  
$file = $_GET['file'];

$ftp_server = "127.0.0.1";
$ftp_user_name = "user";
$ftp_user_pass = "pass";
// set up a connection or die
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");

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

if (ftp_get($conn_id, $file, $file, FTP_BINARY)) {
echo "Successfully written to $file\n";
} else {
echo "There was a problem\n";
}

?>

理想情况下,我会简单地将它们链接到:ftp://example.com/TestFile.txt它会为他们下载文件,但是,它只会在他们的浏览器中向他们显示文件的内容,而不是下载文件。

我浏览了 PHP 手册站点并阅读了 FTP 函数,我相信 ftp_get 是我应该使用的正确函数。

是否有更简单的方法可以做到这一点,或者这只是我忽略的事情?

最佳答案

有两种(或更多)方法可以做到这一点。您可以像使用 ftp_get 一样在服务器上存储文件的副本,然后将其发送给用户。或者您可以每次都下载它。

现在您可以使用 ftp 命令执行此操作,但使用 readfile 是一种更快的方法.
按照 readfile 文档中的第一个示例:

// Save the file as a url
$file = "ftp://{$ftp_user_name}:{$ftp_user_pass}@{$ftp_server}" . $_GET['file'];

// Set the appropriate headers for a file transfer
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
// and send them
ob_clean();
flush();

// Send the file
readfile($file);

这将简单地获取文件并将其内容转发给用户。 header 将使浏览器将文件保存为下载。

您还可以更进一步。假设您将其保存在名为 script.php 的文件中,该文件位于用户可通过 http://example.com/ftp/ 访问的目录中。如果您使用的是 apache2 并启用了 mod_rewrite,则可以在此目录中创建一个 .htaccess 文件,其中包含:

RewriteEngine On
RewriteRule ^(.*)$ script.php?file=$1 [L]

当用户导航到 http://exmaple.com/ftp/README.md 时,您的 script.php 文件将通过 $_GET['file'] 等于 /README.md 并且来自 ftp://user:pass@ftp.example.com/README.md 的文件将被下载 在他的电脑上。

关于php - 运行脚本时无法从 FTP 服务器自动下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com