ftp_get() 不下载,而是将文件移动到网站根文件夹
ftp_get() does not download, instead moves file to website root folder
我在 CakePHP 下开发了一个网站。我正在尝试将下载系统从 Apache 更改为 FTP。
我目前正在使用 PHP 手动执行 FTP(不使用任何插件或库)。
我的代码成功连接到 FTP 服务器等。我遇到的问题是,当我调用 ftp_get($conn_id, $localFile, $remoteFile, FTP_BINARY)
时,它成功执行,尽管文件没有下载,而是它的移动到 /webroot/ 文件夹,顾名思义,该文件夹用作网站的根文件夹(使用 .httaccess 规则)。
我提到 .httaccess 是因为我可能怀疑这就是导致 FTP 将下载路由到 "moving" 到根目录的原因,但我不确定。
以下是我的FTP下载代码:
$conn_id = ftp_connect($host);
$login_result = ftp_login($conn_id,$ftp_user,$ftp_pass);
if($login_result)
{
try
{
if(ftp_get($conn_id, $localFile, $remoteFile, FTP_BINARY))
{
$this->log("Downloaded...","debug");
}
else
{
$this->log("Couldn't download...","debug");
}
}
catch(Exception $e)
{
$this->log("Error: " . $e->getMessage(),"debug");
}
}
else
{
$this->log("Coudln't connect to FTP server...","debug");
}
ftp_close($conn_id);
是的,我检查(打印)了 $conn_id
和 $login_result
,它们正在工作。
路径里面有什么?
$remoteFile = "/downloads/rdticoiroe1432584529/YourMusic.zip";
$localFile = "Music.zip";
代码没有抛出任何错误。我还尝试使用 fotografde/cakephp-ftp
用于 cakephp 和 FTP 的 repo 插件,它的行为相同...
编辑 1:
它是一个音乐下载站点,现在我们使用 Apache 提供文件下载服务(速度很慢),我们的想法是转向 FTP 下载。当客户端请求下载文件时,我正在尝试使用 FTP 协议下载文件。
编辑 2:
这个问题的整个想法是,我试图转向一种更优化的方法来为客户端提供文件。我拥有一个 100Mbit 传输服务器,下载速度非常慢。我目前正在使用 Apache 将文件下载到需要它的客户。
我完全误解了使用 PHP-FTP 向客户端硬盘驱动器提供文件。
因此,我正在寻找一些指导,以了解人们在向请求下载的客户提供文件时使用什么 methods/protocols。 (这是一个音乐下载网站)。
你在这里有一个根本性的误解:FTP 连接中的 "remote file" 是远程 的东西 - 某处另一台服务器上的文件,因为实例。在你的情况下,我认为你试图提供的文件在这个意义上是 "local",但你想要一种更快地将它提供给客户端的方法。
无法将文件推送到客户端的硬盘驱动器(考虑安全隐患),您只能使其可用。现在,客户端可以使用 HTTP 请求它,Apache 将为他们提供内容。如果您安装了 FTP 服务器,他们可以连接到 FTP 客户端并以这种方式请求。同样,您可以安装不同的 Web 服务器,例如 nginx 或 lighttpd,它们可能会更快。
然而,您在 PHP 中所做的任何事情都不会比仅使用 Apache 更快,因为您仍然涉及 Apache,但现在您还拥有 PHP 代码,这充其量需要是时候执行您的代码了,然后再执行 Apache 将要执行的操作。
我在 CakePHP 下开发了一个网站。我正在尝试将下载系统从 Apache 更改为 FTP。
我目前正在使用 PHP 手动执行 FTP(不使用任何插件或库)。
我的代码成功连接到 FTP 服务器等。我遇到的问题是,当我调用 ftp_get($conn_id, $localFile, $remoteFile, FTP_BINARY)
时,它成功执行,尽管文件没有下载,而是它的移动到 /webroot/ 文件夹,顾名思义,该文件夹用作网站的根文件夹(使用 .httaccess 规则)。
我提到 .httaccess 是因为我可能怀疑这就是导致 FTP 将下载路由到 "moving" 到根目录的原因,但我不确定。
以下是我的FTP下载代码:
$conn_id = ftp_connect($host);
$login_result = ftp_login($conn_id,$ftp_user,$ftp_pass);
if($login_result)
{
try
{
if(ftp_get($conn_id, $localFile, $remoteFile, FTP_BINARY))
{
$this->log("Downloaded...","debug");
}
else
{
$this->log("Couldn't download...","debug");
}
}
catch(Exception $e)
{
$this->log("Error: " . $e->getMessage(),"debug");
}
}
else
{
$this->log("Coudln't connect to FTP server...","debug");
}
ftp_close($conn_id);
是的,我检查(打印)了 $conn_id
和 $login_result
,它们正在工作。
路径里面有什么?
$remoteFile = "/downloads/rdticoiroe1432584529/YourMusic.zip";
$localFile = "Music.zip";
代码没有抛出任何错误。我还尝试使用 fotografde/cakephp-ftp
用于 cakephp 和 FTP 的 repo 插件,它的行为相同...
编辑 1:
它是一个音乐下载站点,现在我们使用 Apache 提供文件下载服务(速度很慢),我们的想法是转向 FTP 下载。当客户端请求下载文件时,我正在尝试使用 FTP 协议下载文件。
编辑 2:
这个问题的整个想法是,我试图转向一种更优化的方法来为客户端提供文件。我拥有一个 100Mbit 传输服务器,下载速度非常慢。我目前正在使用 Apache 将文件下载到需要它的客户。
我完全误解了使用 PHP-FTP 向客户端硬盘驱动器提供文件。
因此,我正在寻找一些指导,以了解人们在向请求下载的客户提供文件时使用什么 methods/protocols。 (这是一个音乐下载网站)。
你在这里有一个根本性的误解:FTP 连接中的 "remote file" 是远程 的东西 - 某处另一台服务器上的文件,因为实例。在你的情况下,我认为你试图提供的文件在这个意义上是 "local",但你想要一种更快地将它提供给客户端的方法。
无法将文件推送到客户端的硬盘驱动器(考虑安全隐患),您只能使其可用。现在,客户端可以使用 HTTP 请求它,Apache 将为他们提供内容。如果您安装了 FTP 服务器,他们可以连接到 FTP 客户端并以这种方式请求。同样,您可以安装不同的 Web 服务器,例如 nginx 或 lighttpd,它们可能会更快。
然而,您在 PHP 中所做的任何事情都不会比仅使用 Apache 更快,因为您仍然涉及 Apache,但现在您还拥有 PHP 代码,这充其量需要是时候执行您的代码了,然后再执行 Apache 将要执行的操作。