PHP 远程附件如何上传以及php ftp类的详细讲解

最近,我发现很多地方需要用ftp类操作其它的网站服务器,上传图片之类的。现在贴一个 php ftp类 分享给大家参考学习:
class Ftp {
//FTP 连接资源
private $link;
//FTP连接时间
public $link_time;
//错误代码
private $err_code = 0;
//传送模式{文本模式:FTP_ASCII, 二进制模式:FTP_BINARY}
public $mode = FTP_BINARY;
/**
* 连接FTP服务器
* @param string $host       服务器地址
* @param string $username   用户名
* @param string $password   密码
* @param integer $port       服务器端口,默认值为21
* @param boolean $pasv        是否开启被动模式
* @param boolean $ssl      是否使用SSL连接
* @param integer $timeout     超时时间
*/
public function connect($host, $username = '', $password = '', $port = '21', $pasv = false, $ssl = false, $timeout = 30) {
$start = time();
if ($ssl) {
if (!$this->link = @ftp_ssl_connect($host, $port, $timeout))     {
$this->err_code = 1;
return false;
}
} else {
if (!$this->link = @ftp_connect($host, $port, $timeout)) {
$this->err_code = 1;
return false;
}
}
if (@ftp_login($this->link, $username, $password)) {
if ($pasv)
ftp_pasv($this->link, true);
$this->link_time = time() - $start;
return true;
} else {
$this->err_code = 1;
return false;
}
register_shutdown_function(array(&$this, 'close'));
}
/**
* 创建文件夹
* @param string $dirname 目录名,
*/
public function mkdir($dirname) {
if (!$this->link) {
$this->err_code = 2;
return false;
}
$dirname = $this->ck_dirname($dirname);
$nowdir = '/';
foreach ($dirname as $v) {
if ($v && !$this->chdir($nowdir . $v)) {
if ($nowdir)
$this->chdir($nowdir);
@ftp_mkdir($this->link, $v);
}
if ($v)
$nowdir .= $v . '/';
}
return true;
}
/**
* 上传文件
* @param string $remote 远程存放地址
* @param string $local 本地存放地址
*/
public function put($remote, $local) {
if (!$this->link) {
$this->err_code = 2;
return false;
}
$dirname = pathinfo($remote, PATHINFO_DIRNAME);
if (!$this->chdir($dirname)) {
$this->mkdir($dirname);
}
if (@ftp_put($this->link, $remote, $local, $this->mode)) {
return true;
} else {
$this->err_code = 7;
return false;
}
}
/**
* 删除文件夹
* @param string $dirname  目录地址
* @param boolean $enforce 强制删除
*/
public function rmdir($dirname, $enforce = false) {
if (!$this->link) {
$this->err_code = 2;
return false;
}
$list = $this->nlist($dirname);
if ($list && $enforce) {
$this->chdir($dirname);
foreach ($list as $v) {
$this->f_delete($v);
}
} elseif ($list && !$enforce) {
$this->err_code = 3;
return false;
}
@ftp_rmdir($this->link, $dirname);
return true;
}
/**
* 删除指定文件
* @param string $filename 文件名
*/
public function f_delete($filename) {
if (!$this->link) {
$this->err_code = 2;
return false;
}
if (@ftp_delete($this->link, $filename)) {
return true;
} else {
$this->err_code = 4;
return false;
}
}
/**
* 返回给定目录的文件列表
* @param string $dirname  目录地址
* @return array 文件列表数据
*/
public function nlist($dirname) {
if (!$this->link) {
$this->err_code = 2;
return false;
}
if ($list = @ftp_nlist($this->link, $dirname)) {
return $list;
} else {
$this->err_code = 5;
return false;
}
}
/**
* 在 FTP 服务器上改变当前目录
* @param string $dirname 修改服务器上当前目录
*/
public function chdir($dirname) {
if (!$this->link) {
$this->err_code = 2;
return false;
}
if (@ftp_chdir($this->link, $dirname)) {
return true;
} else {
$this->err_code = 6;
return false;
}
}
/**
* 获取错误信息
*/
public function get_error() {
if (!$this->err_code)
return false;
$err_msg = array(
'1' => 'Server can not connect',
'2' => 'Not connect to server',
'3' => 'Can not delete non-empty folder',
'4' => 'Can not delete file',
'5' => 'Can not get file list',
'6' => 'Can not change the current directory on the server',
'7' => 'Can not upload files'
);
return $err_msg[$this->err_code];
}
/**
* 检测目录名
* @param string $url 目录
* @return 由 / 分开的返回数组
*/
private function ck_dirname($url) {
$url = str_replace('', '/', $url);
$urls = explode('/', $url);
return $urls;
}
/**
* 关闭FTP连接
*/
public function close() {
return @ftp_close($this->link);
}
}

先来说说远程附件上传的大致流程:
用户选择文件上传提交到服务器->服务器接收到文件->服务器一些安全检测完成通过FTP功能上传到相应FTP服务器。
我说的只是一个大概过程,不是很标准,明白个意思即可啦!~
这个类大致使用方法:
首先通过 $ftps->connect($host,$username,$password,$post,$pasv,$ssl,$timeout);进行FTP服务器连接。
通过具体的函数进行FTP的操作。
$ftps->mkdir() 创建目录,可以创建多级目录以“/abc/def/higk”的形式进行多级目录的创建。
$ftps->put()上传文件
$ftps->rmdir()删除目录
$ftps->f_delete()删除文件
$ftps->nlist()列出指定目录的文件
$ftps->chdir()变更当前文件夹
$ftps->get_error()获取错误信息

以上是本文关于PHP 远程附件上传,php ftp类的详解,希望本文对广大 php开发者有所帮助,感谢阅读本文。更多有关 php技术问题欢迎加群探讨: 276167802 ,验证码: csl,不写验证不予通过。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值