php实现ftp远程上传的方法

       一般的应用网站,尤其cms类的网站,上传图片、文件是很常见的功能,但一般上传文件实现都是保存在本网站所在上传文件夹下,也就是上传的图片文件跟随程序文件一起来部署的,这样一般来说没什么问题,但是文件增大后,移植和部署有些不够灵活,如果把这个上传文件目录独立出来,单独部署,存储在不同的服务器上(文件服务器),这样单独维护,比较灵活,分散程序服务器的压力,对网站的优化也很有帮助。下面给出一个PHP实现的ftp远程上传文件的方法。

注:本文使用的是thinkphp框架,其他框架实现方法也类似。

 服务端上传文件的代码方法如下:

public function upload_images_ftp($file,$exts,$path){
	   $local_filename = $file['name'];	
   
	   $extName=explode('.',$local_filename)[1];
	   if(!in_array($extName,$exts)){ return '不支持此上传文件类型.'; }
	   $local_file = $file['tmp_name'];
	   //ftp连接参数配置
	   $host = C('ftp_host');  $user =C('ftp_user'); $pwd=C('ftp_password');
	 try{  
	   $ftp_conn = ftp_connect($host);
	   if(!$ftp_conn){ return "远程连接错误"; }
       $login = @ftp_login($ftp_conn, $user, $pwd);
	   if(!$login){ ftp_close($ftp_conn);  return "远程连接参数错误!"; }
	   $ftp_dir = $path;  
	   
	   !@ftp_mkdir($ftp_conn, $ftp_dir); 
	   $saveName=time().mt_rand(100000,999999).'.'.$extName;
	   $remoteFile=$ftp_dir.'/'.$saveName;
	   if(!file_exists($local_file)){
		ftp_close($ftp_conn);
		return "上传文件错误,无效生成本地文件.";
       }
	   ftp_set_option($ftp_conn, FTP_USEPASVADDRESS, false); //考虑到不同ftp环境,需要加此参数,否则可能会出现连接超时错误
       ftp_pasv($ftp_conn, true);
	   @ftp_put($ftp_conn,$remoteFile,$local_file,FTP_BINARY);
       ftp_close($ftp_conn);//fclose($fp);
     }catch(Exception $e){
	  ftp_close($ftp_conn); return '上传出现异常:'.$e->getMessage(); 
	 } 
	   $info=array('savepath'=>$ftp_dir.'/','savename'=>$saveName);
	   return $info;
	}

调用上传的方法代码如下: 

//上传图片
		if (!empty($_FILES["file"]["tmp_name"])) {
			//文件上传
			$info = $this->upload_images_ftp($_FILES["file"],array('jpg','png','jpeg'),'imgs/'.date(Ymd));
		    if(!is_array($info)) {// 上传错误提示错误信息
		        $this->error($info);
		    }else{// 上传成功 获取上传文件信息
			    $Pic = $info['savepath'].$info['savename'];
			    //存取上传文件路径的处理...
		    }
		}

前端页面比较简单,只要写一个form表单,增加一个输入文件的控件  <input type="file" name="file">,这个不再赘述。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云焰

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值