FTP服务器上传下载文件与WEB服务器的区别

网络结构图

1345

FTP服务器文件上传与WEB服务器文件上传的区别:

WEB文件的上传过程相信很多人知道,就是通过浏览器在本地选择一个上传文件,然后点击提交按钮,本地文件就能被保存到WEB服务器上了。FTP服务器平 时使用的少,所以很多人都不太了解。将文件上传到FTP服务器可以利用PHP的系统函数—FTP函数,程序写完后,执行。可是到FTP服务器上查看,却找 不到此次上传的文件,那么这个文件到哪去了?为什么会出现这种问题,现在让我们看一下它们之间的关系,
工作人员–>WEB服务器–>FTP服务器,FTP服务器在最上层,这里有个就近原则,FTP服务器不会去工作人员的客户端去查找上传的文件,而是到WEB服务器里去查找,此时上传的文件并不在WEB服务器中,所以此次上传文件的过程是失败的,要想成功的把客户端的文件保存到FTP服务器上,首先利用上传控件把本地文件保存到WEB服务器的upload文件夹中(存放上传文件的地方),然后使用PHP的FTP函数,与FTP服务器建立连接,然后使用ftp_put()函数,将WEB服务器指定位置的文件再一次上传到FTP服务器上,这样上传成功后,就可以在FTP服务器上看到上传的文件了。
Code:

//WEB上传文件
if(is_uploaded_file($_FILES[“taskthumbnail”][“tmp_name”])){
if(move_uploaded_file($_FILES[“taskthumbnail”][“tmp_name”], $img_upfile)) {
echo ‘上传成功‘;
} else {
return false;
}
}
//FTP上传文件
$ftp_server = ‘localhost‘;
$ftp_user_name = ‘root’;
$ftp_user_pass = ‘root’;
$conn_id = ftp_connect($ftp_server) or die(“Couldn”t connect to $ftp_server”);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if(ftp_put($conn_id,$remote_file, $local_file, FTP_BINARY)) {
echo “上传成功”;
}

FTP服务器文件下载与WEB服务器文件下载的区别

WEB服务器文件的下载可以通过点击文件的连接地址,把文件从WEB服务器上下载下来并保存到本机的任意一个地方。而如果是FTP服务器,点击文件的连接地址,会有一个弹出框出现,告诉你输入用户名和密码,如果你不知道用户名和密码是不能下载这个文件的,还有一个方法是使用FTP函数—ftp_get()下载文件,可以省去我们每次下载文件时输入用户名和密码,但依然有它的不足之处,就是下载的文件只能保存在一个指定的位置,不能随意存放,自由度不够。有一个问题我们需要记住,就是我们虽然指定了文件的保存地址,但是下载成功后,我们在文件的指定位置却找不到此文件,那这个文件保存到哪了呢,其实它已经从FTP服务器上下载下来了,只不过没有保存的本地,而是保存到了WEB服务器上,为什么呢,这有一个就近原则的问题,FTP服务器接受WEB服务器的请求,所以它就把文件发送给了WEB服务器。既然知道文件保存到WEB服务器上那么再把它下载下来就容易多了,毕竟我们还是熟悉WEB服务器多一下。但是每次文件都下载到一个地方,使用起来很不方便,那么有没有一个可以让我想保存到那就保存到那的解决方案呢。方法总比困难多,所以方法还是有的,鼓掌……。
Code:

$ftp_server = ‘localhost‘;
$ftp_user_name = ‘root’;
$ftp_user_pass = ‘root’;
$conn_id = ftp_connect($ftp_server) or die(“Couldn”t connect to $ftp_server”);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$filename = ‘test.jpg’;
$local_file = getcwd() . “\\” . $filename;
if (ftp_get($conn_id, $local_file, $remote_path . $filename, FTP_ASCII)) {
ftp_close($conn_id);
header (“Cache-Control: must-revalidate, post-check=0, pre-check=0”); // 发送一个报头,告诉浏览器当前页面不进行缓存,每次访问的时间必须从服务器上读取最新的数据
header(“Content-Description: File Transfer”); //输出内容的描述
header(“Content-Type: application/octet-stream”); //输出内容的类型
header(“Content-Length: ” . filesize($local_file)); //输出内容的大小
header(“Content-Disposition: attachment; filename=” . basename($filename)); //已附件的形式下载,下载显示的文件名
ob_clean(); //清空缓存
flush(); //刷新缓存
readfile($local_file); //打开文件,并输出
// 并将这个文件以前面header发送信息设定的类型输出,从而会弹出一个下载框
// 就是把服务器上的a.jpg下载下来,下载显示和保存的名字默认是test.jpg
unlink($local_file);