如何获取Ftp服务器上的文件
- 可以通过账号密码,使用Xftp进行链接
文章插图
XFtp连接
- 通过代码获取,本文主要是通过php代码获取Ftp上的文件,并且去重 。
private $hostname= ''; \地址private $username= '';private $password= '';private $port= 21;private $conn_id= FALSE;/*** FTP登陆** @accessprivate* @return boolean*/private function _login(){return @ftp_login($this->conn_id, $this->username, $this->password);}/*** 关闭FTP** @accesspublic* @return boolean*/public function close(){if (!$this->_isconn()) {return FALSE;}return @ftp_close($this->conn_id);}/*** 判断con_id** @accessprivate* @return boolean*/private function _isconn(){if (!is_resource($this->conn_id)) {if ($this->debug === TRUE) {$this->_error("ftp_no_connection");}return FALSE;}return TRUE;}/*** 下载** @accesspublic* @paramstring远程目录标识(ftp)* @param string 本地目录标识* @param string 下载模式 auto || ascii* @return boolean*/public function download($remotepath, $localpath, $mode = 'auto'){if (!$this->_isconn()) {return FALSE;}$mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;$result = @ftp_get($this->conn_id, $localpath, $remotepath, $mode);if ($result === FALSE) {if ($this->debug === TRUE) {$this->_error("ftp_unable_to_download:localpath[" . $localpath . "]-remotepath[" . $remotepath . "]");}return FALSE;}return TRUE;}/*** 获取目录文件列表** @accesspublic* @paramstring目录标识(ftp)* @return array*/public function filelist($path = '.'){if (!$this->_isconn()) {return FALSE;}return ftp_nlist($this->conn_id, $path);}
以上是ftp一些基础操作,连接,获取文件列表,下载文件,需要获取代码可以私信我获取,【PHP 如何获取Ftp服务器上文件】接下来需要进行获取文件操作,并且去除重复的
- 获取本地文件
- 获取远程文件
- 对比本地没有的文件并且下载
- 对下载的文件进行相关操作
/*** 获取远程文件列表*/private function getRemoteFileList($path, $config){$this->ftp = new Ftp($config);$res = $this->ftp->connect($config);if ($res) {$fileArr = array();$list = $this->listFtpDir($path, $fileArr);$this->ftp->close();return $list;}return false;}private function listFtpDir($dir, &$fileArr){$data = https://www.isolves.com/it/cxkf/yy/php/2023-01-11/$this->ftp->filelist($dir);if (!is_array($data)) {return;}foreach ($data as $value) {if ($this->is_json_file($value)) {$fileArr[] = $value;} else {$this->listFtpDir($value, $fileArr);}}return $fileArr;}public function file($dataDir){//获取本地文件列表$localFileList = $this->getBrLocalFileList($dataDir, 'FLIE/');if (count($localFileList) > 0) {foreach ($localFileList as $key => $value) {$localFileList[$key] = str_replace(self::FTP_FILE_DIR, '', $value);}}//获取远程文件列表$remoteFileList = $this->getBrRemoteFileList($dataDir, 'FLIE');//获取本地没有的文件列表$remoteArr = array();if (count($localFileList) > 0) {foreach ($remoteFileList as $key => $value) {if (!in_array($value, $localFileList)) {$remoteArr[] = $value;}}} else {$remoteArr = $remoteFileList;}//下载文件,对于本地有的不会进行二次下载,上面方法已经过滤然后对文件需要的操作,}/*** 下载远程文件*/private function downRemote2LocalWget($localFtpDir, $list, $config){$this->ftp = new ftp($config);$this->ftp->connect();foreach ($list as $value) {$dir = $localFtpDir . '/' . substr($value, 0, strripos($value, '/'));if (!is_dir($dir)) mkdir($dir, 0777, true);//本地存在则删除if (is_file($localFtpDir . '/' . $value)) {unlink($localFtpDir . '/' . $value);}if (!is_file($localFtpDir . '/' . $value)) {$filesize = $this->ftp->ftpfilesize($value);if (!$filesize) {echo '服务端文件为空!' . "n";} else {$re = $this->ftp->download($value, $dir . '/' . substr($value, strripos($value, '/') + 1, strlen($value) - 1));if ($re) {echo '下载' . $value . '成功!' . "n";} else {echo '下载' . $value . '失败!' . "n";}}}}$this->ftp->close();}
上面是FTP下载文件一些基本操作,只贴了部分代码 。如有出入,可以后台联系我,欢迎指正 。推荐阅读
- 如何选择网络服务提供商
- 如何定位内存泄漏
- 硬盘分几个区最好?该如何合理分区?
- 地板用剩如何变废为宝?
- 教你如何把锡纸变成厨房好帮手
- 教你如何巧妙擦玻璃
- 欧莱雅|【海归求职网CareerGlobal】欧莱雅资深顾问带你了解如何求职高大上的美妆行业!
- 树如何能产盐?盐碱地里的木盐树
- 教你如何巧妙清洁纱窗
- 镜子日常清洁方法 如何正确保养你的镜子