【发布时间】:2015-05-25 20:25:28
【问题描述】:
我有一个在 CakePHP 下开发的网站。我正在尝试将下载系统从 Apache 更改为 FTP。
我目前正在使用 PHP 手动进行 FTP(不使用任何插件或库)。
我的代码成功连接到 FTP 服务器等。我遇到的问题是,当我调用 ftp_get($conn_id, $localFile, $remoteFile, FTP_BINARY) 时,它成功执行,尽管文件没有下载,而是移动到 /webroot/ 文件夹,顾名思义,它用作网站的根文件夹(使用 .httaccess 规则)。
我提到 .httaccess 是因为我可能怀疑这是导致 FTP 将下载路由到“移动”到根目录的原因,但我不确定。
以下是我的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 向客户端硬盘驱动器提供文件。
因此,我正在寻找一些指导,了解人们在向请求下载的客户提供文件时使用哪些方法/协议。 (这是一个音乐下载网站)。
【问题讨论】:
-
$localFile被设置为相对于您的脚本的路径。使用完整的/path/to/target/location -
ftp_get从远程服务器获取文件并将其放在 your 服务器(运行脚本的服务器)上,而不是客户端的计算机上。由于您在$localFile中指定了相对路径,因此它相对于您在服务器上运行的脚本。所以,如果你想把它放在其他地方(在你的服务器上),你需要指定一个绝对路径,或者使用例如`../' 向上移动一个目录,等等。 -
是什么让您认为您可以比 Apache 更快地向客户端提供文件?
-
@ChristianFeo 比什么慢得多?你问他们什么问题?因为我认为他们可能误解了。
-
是的,软件所要做的就是将大量字节(文件内容)推送到线路上;真的没有太多需要优化的地方。但是,一旦它连接到那条线上,它就必须通过整个迷宫般的连接,其中许多连接都因大量其他流量而拥塞,然后才能到达客户端的 PC。顺便说一句,不要根据域名假设服务器的位置 - 大型站点会将数据副本存储在世界各地的服务器上,并自动将用户连接到离他们最近的服务器,在 URL 中没有任何指示全部。