仿照网上的例子写的一个ftp上传类,很简单,适合新手朋友参考。
1、文件上传类 ftp.class.php <?php // ---------------------------------- // File name :class.ftp.php // Description : FTP上传类 // Requirement : PHP5 // createtime: 2012-05-23 // Author: lisc http://bbs.it-home.org // ----------------------------------------- //R FTP 处理; class ftp { var $ftpUrl = ''; var $ftpUser = ''; var $ftpPass = ''; var $ftpDir = ''; var $ftpR = ''; //R ftp资源; var $status = ''; //R 1:成功;2:无法连接ftp;3:用户错误; function ftp($ftpUrl="", $ftpUser="", $ftpPass="", $ftpDir="") { if($ftpUrl){ $this->ftpUrl=$ftpUrl; } if($ftpUser){ $this->ftpUser=$ftpUser; } if($ftpPass){ $this->ftpPass=$ftpPass; } if($ftpUrl){ $this->ftpDir=$ftpDir; } if ($this->ftpR = ftp_connect($this->ftpUrl, 21)) { if (ftp_login($this->ftpR, $this->ftpUser, $this->ftpPass)) { if (!empty($this->ftpDir)) { ftp_chdir($this->ftpR, $this->ftpDir); } ftp_pasv($this->ftpR, true);//R 启用被动模式; $status = 1; } else { $status = 3; } } else { $status = 2; } } //R 切换目录; function cd($dir) { return ftp_chdir($this->ftpR, $dir); } //R 返回当前路劲; function pwd() { return ftp_pwd($this->ftpR); } //R 创建目录 function mkdir($directory) { return ftp_mkdir($this->ftpR,$directory); } //R 删除目录 function rmdir($directory) { return ftp_rmdir($this->ftpR,$directory); } //R 上传文件; function put($localFile, $remoteFile = '') { if ($remoteFile == '') { $remoteFile = end(explode('/', $localFile)); } $res = ftp_nb_put($this->ftpR, $remoteFile, $localFile, FTP_BINARY); while ($res == FTP_MOREDATA) { $res = ftp_nb_continue($this->ftpR); } if ($res == FTP_FINISHED) { return true; } elseif ($res == FTP_FAILED) { return false; } } //R 下载文件; function get($remoteFile, $localFile = '') { if ($localFile == '') { $localFile = end(explode('/', $remoteFile)); } if (ftp_get($this->ftpR, $localFile, $remoteFile, FTP_BINARY)) { $flag = true; } else { $flag = false; } return $flag; } //R 文件大小; function size($file) { return ftp_size($this->ftpR, $file); } //R 文件是否存在; function isFile($file) { if ($this->size($file) >= 0) { return true; } else { return false; } } //R 文件时间 function fileTime($file) { return ftp_mdtm($this->ftpR, $file); } //R 删除文件; function unlink($file) { return ftp_delete($this->ftpR, $file); } function nlist($dir = '/service/resource/') { return ftp_nlist($this->ftpR, $dir); } //R 关闭连接; function bye() { return ftp_close($this->ftpR); } } ?> 2、调用示例 uplaod.php <?php $host = FTPHOST; $user = USER; $pass = PASS; $huodong_url = 'http://xxx.com/2012/zhutialbum01'; // 项目访问的url $huodong_path = 'zhutialbum01'; // 项目的名字,相同目录下能唯一 $crc32 = sprintf("%u",crc32($huodong_url)); $dir1 = ($crc32 % 30); $dir2 = (($crc32 * 3) % 30); $img_path = sprintf('http://xxx.com/huodong/%s/%s',$dir1,$dir2); // 图片目录 $img_name = sprintf('%s_%u_%u',$huodong_path,date('YmdHis',time()),rand(1000,9999)); // 图片名字,无扩展名啊 $filename = $_FILES['img']['name']; preg_match('|\.(\w+)$|', $filename, $ext);//正则表达式匹配出上传文件的扩展名 $ext = strtolower($ext[1]);//转化成小写 $img_name = $img_name .'.'.$ext; $destDir = $dir1.'/'.$dir2;//上传目录 $workDir = TMP_DIR; //本地目录 move_uploaded_file($_FILES['img']['tmp_name'], $workDir."/".$img_name) or die("Cannot move uploaded file to working directory"); $ftp = new ftp($host,$user,$pass,"./"); $localfile = $workDir."/".$img_name; $remotefile='/'.$destDir.'/'.$img_name; $ftpput = $ftp->put($localfile, $remotefile); //FTP上传原图到远程服务器 $ftp->bye(); //关闭FTP连接 unlink($workDir."/".$img_name) or die("Cannot delete uploaded file from working directory -- manual deletion recommended"); if(!$ftpput){ return false; } else{ return $img_path.'/'.$img_name; } ?> |