我有一个在CakePHP下开发的网站。我正在尝试将下载系统从Apache更改为FTP。
我目前正在使用PHP手动进行FTP(不使用任何插件或库)。
我的代码成功连接到FTP服务器等。我遇到的问题是,当我调用ftp_get($conn_id, $localFile, $remoteFile, FTP_BINARY)
时,它会成功执行,尽管文件没有下载,而是将其移动到/ webroot /文件夹,顾名思义,作为网站的根文件夹(使用.httaccess规则)。
我提到了.httaccess,因为我可能怀疑这是导致FTP将下载路由到“移动”到root的原因,但我不确定。
以下是我的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";
代码不会抛出任何错误。我也尝试使用cakephp和FTP的fotografde/cakephp-ftp
repo插件,它也有相同的行为......
编辑1:
它是一个音乐下载网站,现在我们用Apache提供文件下载(速度非常慢),其想法是转向FTP下载。我正在尝试使用FTP协议在客户端请求下载文件时下载文件。
编辑2:
这个问题的整个想法是,我试图采用更优化的方法来向客户提供文件。我拥有一个100Mbit的传输服务器,下载速度很快。我目前正在使用Apache将文件下载到请求它的客户端。
我完全误解了使用PHP-FTP向客户端硬盘驱动器提供文件。
所以,我正在寻找人们在向请求下载的客户提供文件时使用的方法/协议的一些指导。 (这是一个音乐下载网站)。
答案 0 :(得分:3)
你在这里有一个根本的误解:例如,FTP连接中的“远程文件”是远程的东西 - 某个地方的另一个服务器上的文件。在您的情况下,我认为您尝试提供的文件在这个意义上是“本地的”,但您想要一种更快地将其发送给客户端的方法。
无法将文件推送到客户端的硬盘驱动器(考虑安全隐患),您只能使其可用。现在,客户端可以使用HTTP请求它,Apache将为它们提供内容。如果您安装了FTP服务器,他们可以与FTP客户端连接并以此方式请求它。同样,您可以安装不同的Web服务器,如nginx或lighttpd,这可能会更快。
然而,你在PHP中所做的事情将比Apache更快,因为你仍然涉及到Apache,但现在你也拥有了你的PHP代码,在执行Apache之前最多需要时间来执行你的代码无论如何都要做。