最新最全的php ftp操作类,来自eaglephp框架
<?php
/**
*
* EaglePHP FTP操作类
*
* @author maojianlw@139.com
* @link http://www.eaglephp.com
* @since 2013-06-18
*/
class Ftp
{
/**
*
* 用户名
*
* @var string
*/
private static $username = null;
/**
*
* 密码
*
* @var string
*/
private static $password = null;
/**
*
* 连接的服务器
*
* @var string
*/
private static $host = null;
/**
*
* 连接资源句柄
*
* @var resource
*/
private static $resource = null;
/**
*
* 连接并登陆ftp服务器
*
* @param string $host
* @param string $username
* @param string $password
* @param int $port
* @param int $timeout
* @param bool $pasv
* @return bool
*/
public static function connect($host, $username, $password, $port=21, $timeout=90, $pasv = false)
{
if(!extension_loaded('ftp')) throw_exception(language('SYSTEM:module.not.loaded', array('ftp')));
if((self::$resource = ftp_connect($host, $port, $timeout)) === false) throw_exception('ftp_unable_to_connect');
if(!self::login($username, $password)) throw_exception('ftp_unable_to_login');
if($pasv === true) self::pasv($pasv);
return true;
}
/**
*
* 登录 FTP 服务器
*
* @param string $username
* @param string $password
* @return bool
*/
public static function login($username, $password)
{
return ftp_login(self::$resource, $username, $password);
}
/**
*
* 切换目录至当前目录的父目录 (上级目录)
*
* @return bool
*/
public static function cdup()
{
return ftp_cdup(self::$resource);
}
/**
*
* 将当前目录切换为指定的目录
*
* @param string $directory
* @return bool
*/
public static function chdir($directory)
{
return ftp_chdir(self::$resource, $directory);
}
/**
*
* 设置在指定的远程文件的权限模式
*
* @param int $mode
* @param string $filename
* @return bool
*/
public static function chmod($mode, $filename)
{
return ftp_chmod(self::$resource, $mode, $filename);
}
/**
*
* 关闭ftp连接标识符并释放资源
*
* @return bool
*/
public static function close()
{
return ftp_close(self::$resource);
}
/**
*
* ftp_close() 的 别名
*
* @return bool
*/
public static function quit()
{
return self::close();
}
/**
*
* 删除 FTP 服务器上的一个文件
*
* @param string $path
* @return bool
*/
public static function delete($path)
{
return ftp_delete(self::$resource, $path);
}
/**
*
* 请求运行一条 FTP 命令
*
* @param string $command
* @return bool
*/
public static function exec($command)
{
return ftp_exec(self::$resource, $command);
}
/**
*
* 发送到FTP服务器的任意命令
*
* @param string $command
* @return array
*/
public static function raw($command)
{
return ftp_raw(self::$resource, $command);
}
/**
*
* 从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中
*
* @param resource $handle 本地已经打开的文件的句柄
* @param string $remote_file 远程文件
* @param int $mode 传送模式参数 mode 必须是 (文本模式) FTP_ASCII 或 (二进制模式) FTP_BINARY 中的一个
* @param int $resumepos
* @return bool
*/
public static function fget($handle, $remote_file, $mode=FTP_ASCII, $resumepos=0)
{
return ftp_fget(self::$resource, $handle, $remote_file, $mode, $resumepos);
}
/**
*
* 上传一个已经打开的文件到 FTP 服务器
*
* @param string $remote_file
* @param resource $handle
* @param int $mod
* @param int $startpos
* @return bool
*/
public static function fput($remote_file, $handle, $mod=FTP_ASCII, $startpos=0)
{
return ftp_fput(self::$resource, $remote_file, $handle, $mode, $startpos);
}
/**
*
* 返回当前 FTP 连接的各种不同的选项设置
*
* @param int $option
* @return mixed
*/
public static function getOption($option)
{
return ftp_get_option(self::$resource, $option);
}
/**
*
* 设置各种 FTP 运行时选项
*
* @param int $option
* @param mixed $value
* @return bool
*/
public static function setOption($option, $value)
{
return ftp_set_option(self::$resource, $option, $value);
}
/**
*
* 从 FTP 服务器上下载一个文件
*
* @param string $local_file
* @param string $remote_file
* @param int $mode
* @param int $resumepos
* @return bool
*/
public static function get($local_file, $remote_file, $mode=FTP_ASCII, $resumepos=0)
{
return ftp_get(self::$resource, $local_file, $remote_file, $mode, $resumepos);
}
/**
*
* 上传文件到 FTP 服务器
*
* @param string $remote_file
* @param string $local_file
* @param int $mode
* @param int $startpos
* @return bool
*/
public static function put($remote_file, $local_file, $mode=FTP_ASCII, $startpos=0)
{
return ftp_put(self::$resource, $remote_file, $local_file, $mode, $startpos);
}
/**
*
* 返回指定文件的最后修改时间
*
* @param string $remote_file
*/
public static function mdtm($remote_file)
{
return ftp_mdtm(self::$resource, $remote_file);
}
/**
*
* 递归创建目录并授权
*
* @param string $directory
* @param int $mode 权限模式
* @return string 如果成功返回新建的目录名,否则返回 FALSE
*/
public static function mkdir($directory, $mode=null)
{
if(empty($directory)) return false;
if(self::isDir($directory)) return true;
if(!self::mkdir(dirname($directory), $mode)) return false;
if(!ftp_mkdir(self::$resource, $directory)) return false;
if(!is_null($mode)) self::chmod($mode, $directory);
return true;
}
/**
*
* 递归删除 FTP服务器上的目录
*
* @param string $directory
* @return bool
*/
public static function rmdir($directory)
{
$list = self::nlist($directory);
if($list !== false && count($list) > 0)
{
foreach ($list as $k=>$v)
{
$path = "{$directory}/{$v}";
if(self::isDir($path)) self::rmdir($path);
else self::delete($path);
}
}
return ftp_rmdir(self::$resource, $directory);
}
/**
*
* 连续获取/发送文件(non-blocking)
* 以不分块的方式连续获取/发送一个文件。
*
* @return int 返回常量 FTP_FAILED 或 FTP_FINISHED 或 FTP_MOREDATA
*/
public static function nbContinue()
{
return ftp_nb_continue(self::$resource);
}
/**
* 从检索FTP服务器上的文件并将其写入一个打开的文件(非阻塞)
*
* @param resource $handle
* @param string $remote_file
* @param int $mode
* @param int $resumepos
* @return int 返回ftp_failed或ftp_finished或ftp_moredata
*/
public static function nbFget($handle, $remote_file, $mode=FTP_ASCII, $resumepos=0)
{
return ftp_nb_fget(self::$resource, $handle, $remote_file, $mode, $resumepos);
}
/**
*
* 从打开的文件到FTP服务器上的文件(非阻塞)
*
* @param unknown_type $remote_file
* @param unknown_type $handle
* @param unknown_type $mode
* @param unknown_type $startpos
*/
public static function nbFput($remote_file, $handle, $mode=FTP_ASCII, $startpos=0)
{
return ftp_nb_fput(self::$resource, $remote_file, $handle, $mode, $startpos);
}
/**
*
* 从 FTP 服务器上获取文件并写入本地文件(non-blocking)
*
* @param string $local_file
* @param string $remote_file
* @param int $mode
* @param int $resumepos
* @return int 返回 FTP_FAILED,FTP_FINISHED 或 FTP_MOREDATA
*/
public static function nbGet($local_file, $remote_file, $mode=FTP_ASCII, $resumepos=0)
{
return ftp_nb_get(self::$resource, $local_file, $remote_file, $mode, $resumepos);
}
/**
*
* 存储一个文件至 FTP 服务器(non-blocking)
*
* @param string $remote_file
* @param string $local_file
* @param int $mode
* @param int $startpos
* @return int 返回 FTP_FAILED,FTP_FINISHED 或 FTP_MOREDATA
*/
public static function nbPut($remote_file, $local_file, $mode=FTP_ASCII, $startpos=0)
{
return ftp_nb_put(self::$resource, $remote_file, $local_file, $mode, $startpos);
}
/**
*
* 返回给定目录的文件列表
*
* @param string $directory
* @return array
*/
public static function nlist($directory)
{
return ftp_nlist(self::$resource, $directory);
}
/**
*
* 返回当前 FTP 被动模式是否打开
* 在被动模式打开的情况下,数据的传送由客户机启动,而不是由服务器开始。
*
* @param bool $pasv
* @return bool
*/
public static function pasv($pasv)
{
return ftp_pasv(self::$resource, $pasv);
}
/**
*
* 返回当前目录名
*
* @return string
*/
public static function pwd()
{
return ftp_pwd(self::$resource);
}
/**
*
* 返回指定目录下文件的详细列表
* 将执行 FTP LIST 命令,并把结果做为一个数组返回
*
* @param string $directory
* @return array
*/
public static function rawlist($directory)
{
return ftp_rawlist(self::$resource, $directory);
}
/**
*
* 更改 FTP 服务器上的文件或目录名
*
* @param string $oldname
* @param string $newname
* @return bool
*/
public static function rename($oldname, $newname)
{
return ftp_rename(self::$resource, $oldname, $newname);
}
/**
*
* 向服务器发送 SITE 命令
*
* @param string $command
* @return bool
*/
public static function site($command)
{
return ftp_site(self::$resource, $command);
}
/**
*
* 返回指定文件的大小
*
* @param string $remote_file
* @return int 如果指定文件不存在或发生错误,则返回 -1。有些 FTP 服务器可能不支持此特性。
*/
public static function size($remote_file)
{
return ftp_size(self::$resource, $remote_file);
}
/**
*
* 打开一个安全的ssl-ftp连接
* 注:此函数需要OpenSSL扩展库支持
*
* @param string $host
* @param int $port
* @param int $timeout
* @return resource
*/
public static function sslConnect($host, $port=21, $timeout=90)
{
return ftp_ssl_connect($host, $port, $timeout);
}
/**
*
* 返回远程 FTP 服务器的操作系统类型
*
* @return string
*/
public static function systype()
{
return ftp_systype(self::$resource);
}
/**
*
* 发送一个配置命令远程FTP服务器对上传的文件分配空间。
* 注:许多FTP服务器不支持这个命令。
*
* @param int $filesize 分配的字节数。
* @param string $result 服务器的响应文本表示将通过引用返回的结果如果提供一个变量。
* @return bool
*/
public static function alloc($filesize, &$result='')
{
return ftp_alloc(self::$resource, $filesize, $result);
}
/**
*
* 判断是否为目录
*
* @param string $remote_file
* @return bool
*/
public static function isDir($remote_file)
{
return (self::size($remote_file) === -1 && self::rawlist($remote_file) !== false) ? true : false;
}
/**
*
* 根据文件后缀获取ftp传输模式
*
* @param string $file
* @return string
*/
private static function _getTransferMode($file)
{
$extArr = array('txt', 'text', 'php', 'phps', 'php4', 'js', 'css', 'htm', 'html', 'phtml', 'shtml', 'log', 'xml');
if(($pos = strrpos($file, '.')) === false) return FTP_ASCII;
$ext = substr($file, $pos + 1);
return in_array($ext, $extArr) ? FTP_ASCII : FTP_BINARY;
}
/**
*
* 上传文件至FTP服务器
*
* @param string $local_file
* @param string $remote_file
* @param int $mode
* @param int $permissions
* @return void
*/
public static function upload($local_file, $remote_file, $mode=null, $permissions = null)
{
if(!file_exists($local_file)) throw_exception('ftp_no_source_file:'.$local_file);
$mode = is_null($mode) ? self::_getTransferMode($local_file) : $mode;
if(!self::put($remote_file, $local_file, $mode)) throw_exception("ftp_unable_to_upload:local_file[{$local_file}]/remote_file[{$remote_file}]");
if(!is_null($permissions)) self::chmod($permissions, $remote_file);
return true;
}
/**
*
* 上传目录至FTP服务器
* 注:上传的中目录或文件名不能包含中文
*
* @param string $local_dir
* @param string $remote_dir
* @param int $mode
* @param int $permissions
*/
public static function uploadDir($local_dir, $remote_dir, $permissions = null)
{
$list = Folder::read($local_dir);
if(count($list) > 0)
{
if(!self::isDir($remote_dir)) self::mkdir($remote_dir, $permissions);
foreach ($list as $k=>$v)
{
$local_path = $local_dir.'/'.$v;
$remote_path = $remote_dir.'/'.$v;
if(Folder::isDir($local_path)) self::uploadDir($local_path, $remote_path);
else self::upload($local_path, $remote_path, null, $permissions);
}
return true;
}
return false;
}
/**
*
* 从ftp下载文件至本地
*
* @param string $remote_file
* @param string $local_file
* @param int $mode
* @return bool
*/
public static function download($remote_file, $local_file, $mode = null)
{
$mode = is_null($mode) ? self::_getTransferMode($remote_file) : $mode;
if(!self::get($local_file, $remote_file, $mode)) throw_exception("ftp_unable_to_download:local_file[{$local_file}]-remote_file[{$remote_file}]");
return true;
}
/**
*
* 下载ftp上的文件夹至本地
*
* @param string $remote_dir
* @param string $local_dir
*/
public static function downloadDir($remote_dir, $local_dir)
{
$list = self::nlist($remote_dir);
if(count($list) > 0)
{
if(!Folder::isDir($local_dir)) mk_dir($local_dir);
foreach ($list as $k=>$v)
{
$remote_path = $remote_dir.'/'.$v;
$local_path = $local_dir.'/'.$v;
if(self::isDir($remote_path)) self::downloadDir($remote_path, $local_path);
else self::download($remote_path, $local_path);
}
return true;
}
return false;
}
}
测试代码:
Ftp::connect('192.168.16.188', 'test', '123456');
//$a = Ftp::get('d:/t.txt', 'php.ini');
//$a = Date::format('Y-m-d H:i:s', Ftp::mdtm('php.ini'));
//$a = Ftp::mkdir('maojian');
//$a = Ftp::nlist('test');
//$a = Ftp::pwd();
//$a = Ftp::rawlist('bak');
//$a = Ftp::rename('1111', 'aaa_ftp_test');
//$a = Ftp::mkdir('/qq/1111/2222/');
//$a = Ftp::rmdir('hahaha');
//$a = Ftp::systype();
//$a = Ftp::isDir('aaa_ftp_test/tttt/');
//$a = Ftp::upload('d:/aaa.txt', 'aaa.txt');
//$a = Ftp::delete('aaa.txt');
//$a = Ftp::uploadDir('d:/TDDownload', '/hahaha');
//$a = Ftp::downloadDir('/hahaha', 'd:/aaaa');
var_dump($a);
以上就是最新最全的PHP FTP操作类,来自EaglePHP框架的内容,更多相关内容请关注PHP中文网(www.php.cn)!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号