ftp_get()不下载,而是将文件移动到网站根文件夹

时间:2015-05-25 20:25:28

标签: php cakephp ftp

我有一个在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向客户端硬盘驱动器提供文件。

所以,我正在寻找人们在向请求下载的客户提供文件时使用的方法/协议的一些指导。 (这是一个音乐下载网站)。

1 个答案:

答案 0 :(得分:3)

你在这里有一个根本的误解:例如,FTP连接中的“远程文件”是远程的东西 - 某个地方的另一个服务器上的文件。在您的情况下,我认为您尝试提供的文件在这个意义上是“本地的”,但您想要一种更快地将其发送给客户端的方法。

无法将文件推送到客户端的硬盘驱动器(考虑安全隐患),您只能使其可用。现在,客户端可以使用HTTP请求它,Apache将为它们提供内容。如果您安装了FTP服务器,他们可以与FTP客户端连接并以此方式请求它。同样,您可以安装不同的Web服务器,如nginx或lighttpd,这可能会更快。

然而,你在PHP中所做的事情将比Apache更快,因为你仍然涉及到Apache,但现在你也拥有了你的PHP代码,在执行Apache之前最多需要时间来执行你的代码无论如何都要做。