php语言 百分网手机站

php实现通过ftp上传文件(3)

时间:2020-08-04 12:34:05 php语言

php实现通过ftp上传文件

  * @param  string 远程目录标识(ftp)

  * @param  string 上传模式 auto || ascii

  * @param  int  上传后的文件权限列表

  * @return boolean

  */

  public function upload($localpath, $remotepath, $mode = 'auto', $permissions = NULL) {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  if( ! file_exists($localpath)) {

  if($this->debug === TRUE) {

  $this->_error("ftp_no_source_file:".$localpath);

  }

  return FALSE;

  }

  if($mode == 'auto') {

  $ext = $this->_getext($localpath);

  $mode = $this->_settype($ext);

  }

  $mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;

  $result = @ftp_put($this->conn_id, $remotepath, $localpath, $mode);

  if($result === FALSE) {

  if($this->debug === TRUE) {

  $this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]");

  }

  return FALSE;

  }

  if( ! is_null($permissions)) {

  $this->chmod($remotepath,(int)$permissions);

  }

  return TRUE;

  }

  /**

  * 下载

  *

  * @access public

  * @param  string 远程目录标识(ftp)

  * @param  string 本地目录标识

  * @param  string 下载模式 auto || ascii

  * @return boolean

  */

  public function download($remotepath, $localpath, $mode = 'auto') {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  if($mode == 'auto') {

  $ext = $this->_getext($remotepath);

  $mode = $this->_settype($ext);

  }

  $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;

  }

  /**

  * 重命名/移动

  *

  * @access public

  * @param  string 远程目录标识(ftp)

  * @param  string 新目录标识

  * @param  boolean 判断是重命名(FALSE)还是移动(TRUE)

  * @return boolean

  */

  public function rename($oldname, $newname, $move = FALSE) {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  $result = @ftp_rename($this->conn_id, $oldname, $newname);

  if($result === FALSE) {

  if($this->debug === TRUE) {

  $msg = ($move == FALSE) ? "ftp_unable_to_rename" : "ftp_unable_to_move";

  $this->_error($msg);

  }

  return FALSE;

  }

  return TRUE;

  }

  /**

  * 删除文件

  *

  * @access public

  * @param  string 文件标识(ftp)

  * @return boolean

  */

  public function delete_file($file) {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  $result = @ftp_delete($this->conn_id, $file);

  if($result === FALSE) {

  if($this->debug === TRUE) {

  $this->_error("ftp_unable_to_delete_file:file[".$file."]");

  }

  return FALSE;

  }

  return TRUE;

  }

  /**

  * 删除文件夹

  *

  * @access public

  * @param  string 目录标识(ftp)

  * @return boolean

  */

  public function delete_dir($path) {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  //对目录宏的'/'字符添加反斜杠'\'

  $path = preg_replace("/(.+?)\/*$/", "\\1/", $path);

  //获取目录文件列表

  $filelist = $this->filelist($path);

  if($filelist !== FALSE AND count($filelist) > 0) {

  foreach($filelist as $item) {

  //如果我们无法删除,那么就可能是一个文件夹

  //所以我们递归调用delete_dir()

  if( ! @delete_file($item)) {

  $this->delete_dir($item);

  }

  }

  }

  //删除文件夹(空文件夹)

  $result = @ftp_rmdir($this->conn_id, $path);

  if($result === FALSE) {

  if($this->debug === TRUE) {

  $this->_error("ftp_unable_to_delete_dir:dir[".$path."]");

  }

  return FALSE;

  }

  return TRUE;

  }

  /**

  * 修改文件权限

  *

  * @access public

  * @param  string 目录标识(ftp)

  * @return boolean

  */

  public function chmod($path, $perm) {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  //只有在PHP5中才定义了修改权限的函数(ftp)

  if( ! function_exists('ftp_chmod')) {

  if($this->debug === TRUE) {

  $this->_error("ftp_unable_to_chmod(function)");

  }

  return FALSE;

  }

  $result = @ftp_chmod($this->conn_id, $perm, $path);

  if($result === FALSE) {

  if($this->debug === TRUE) {

  $this->_error("ftp_unable_to_chmod:path[".$path."]-chmod[".$perm."]");

  }

  return FALSE;

  }

  return TRUE;

  }

  /**

  * 获取目录文件列表

  *

  * @access public

  * @param  string 目录标识(ftp)

  * @return array

  */

  public function filelist($path = '.') {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  return ftp_nlist($this->conn_id, $path);

  }

  /**

  * 关闭FTP

  *

  * @access public

  * @return boolean

  */

  public function close() {

  if( ! $this->_isconn()) {

  return FALSE;

  }

  return @ftp_close($this->conn_id);

  }

  /**

  * FTP成员变量初始化

  *

  * @access private

  * @param  array  配置数组

  * @return void

  */

  private function _init($config = array()) {

  foreach($config as $key => $val) {

  if(isset($this->$key)) {

  $this->$key = $val;

  }

  }

  //特殊字符过滤

  $this->hostname = preg_replace('|.+?://|','',$this->hostname);

  }

  /**

  * FTP登陆

  *

  * @access private

  * @return boolean

  */

  private function _login() {

  return @ftp_login($this->conn_id, $this->username, $this->password);

  }

  /**

  * 判断con_id

  *

  * @access private

  * @return boolean

  */

  private function _isconn() {

  if( ! is_resource($this->conn_id)) {

  if($this->debug === TRUE) {

  $this->_error("ftp_no_connection");

  }

  return FALSE;

  }

  return TRUE;

  }

  /**

  * 从文件名中获取后缀扩展

  *

  * @access private

  * @param  string 目录标识

  * @return string

  */

  private function _getext($filename) {

  if(FALSE === strpos($filename, '.')) {

  return 'txt';

  }

  $extarr = explode('.', $filename);

  return end($extarr);

  }

  /**

  * 从后缀扩展定义FTP传输模式 ascii 或 binary

  *

  * @access private

  * @param  string 后缀扩展

  * @return string

  */

  private function _settype($ext) {

  $text_type = array (

  'txt',

  'text',

  'php',

  'phps',

  'php4',

  'js',

  'css',

  'htm',

  'html',

  'phtml',

  'shtml',

  'log',

  'xml'

  );

  return (in_array($ext, $text_type)) ? 'ascii' : 'binary';

  }

  /**

  * 错误日志记录

  *

  * @access prvate

  * @return boolean

  */

  private function _error($msg) {

  return @file_put_contents('/tmp/ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".$msg."]\n", FILE_APPEND);

  }

  }

  /*End of file ftp.php*/

  /*Location /Apache Group/htdocs/ftp.php*/

【php实现通过ftp上传文件】相关文章:

PHP实现大文件上传源代码08-29

PHP文件上传源码分析09-04

PHP+jQuery+Ajax仿淘宝多上传按钮单文件上传08-16

PHP中读取大文件实现方法09-05

PHP中读取大文件实现方法详解09-23

PHP文件锁与进程锁的实现08-17

PHP文件是什么 如何打开PHP文件08-27

PHP如何通过会话控制实现身份验证09-22

php关于PHP上传入门学习知识点09-16

PHP文件怎么操作09-07