【发布时间】:2017-12-11 05:19:33
【问题描述】:
所以我有一个包含大量大文件(主要是卫星图像数据)的 FTP 服务器。我正在用 PHP 构建一个系统来服务用户下载文件。系统可以显示FTP服务器中的文件列表,以便他们下载文件。通常,列表不是来自 FTP 服务器,我将列表存储在数据库中。
对于 FTP 连接,我已将详细信息(ftp 用户、ftp 密码和 ftp 服务器)存储在配置文件中。所以这里我不希望用户输入任何内容,只需点击下载按钮,然后获取文件。
我系统的流程是:
- 检查请求的数据是否可用。
- 如果可用,则使用
ftp_connect进行FTP 连接 - 如果连接成功,则使用
ftp_login登录FTP - 向数据库中的log表插入新记录。
- 使用 PHP header('Location:') 将用户重定向到请求的文件
- 关闭 FTP 连接
确实有效!
但它总是要求每个用户下载请求的 FTP 用户名和密码。
那么有什么问题吗?或者有没有更好的方法?
编辑: 这是download.php中的代码:
<?php
include "config.php";
include "query_user.php";
include "function.php";
$data_id = $_GET['data_id'];
$user_id = $query_user['user_id'];
$query = mysqli_query($link, "SELECT count(*) as jumlah, data_url FROM lord_data WHERE data_id='".$data_id."'");
$query_data = mysqli_fetch_array($query);
if($query_data['jumlah'] > 0){
$name= $query_data['data_url'];
set_time_limit(20);
$conn_id = ftp_connect($ftp_server, 21, 10);
if($conn_id){
$conn_login = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$query = mysqli_query($link, "INSERT INTO lord_download_log (user_id, data_id) VALUES ('$user_id', '$data_id')");
header('Location: ftp://'.$ftp_server.'/foldername/'.$name.'');
// close the connection
ftp_close($conn_id);
}else{
$ftp_server = "172.xx.xx.xx";
$change_ip = ftp_connect($ftp_server, 21, 10);
if($change_ip){
$conn_login = ftp_login($change_ip, $ftp_user_name, $ftp_user_pass);
$query = mysqli_query($link, "INSERT INTO lord_download_log (user_id, data_id) VALUES ('$user_id', '$data_id')");
header('Location: ftp://'.$ftp_server.'/foldername/'.$name.'');
// close the connection
ftp_close($change_ip);
}else{
echo "Couldn't establish a connection.";
}
}
}else{
echo "<script>alert('Download failed! Data is not available');document.location='index.php?p=data_download';</script>";
}
?>
【问题讨论】:
-
与问题分享您的代码。当您使用
ftp_login登录时,您应该使用ftp_get方法下载文件 -
我已编辑问题并粘贴代码