PHP的FTP学习(三)


Posted in PHP onOctober 09, 2006

By Vikram Vaswani
Melonfire
November 07, 2000
现在,我们已经接触了PHP关于FTP的大量函数,但这仅仅只是函数,离我们的目标还远远不够,要显示出这些函数的真正力量,我们应该建立一个程序,这个程序能以WEB方式上传,下载文件---这就是我们将要做的!

在我们进入代码前,我想要告诉大家的是,这个例子仅仅只是为了向大家解释PHP的各种FTP函数的使用,很多方面还不够完善,比如说,错误分析等,至于你想应用到你自己的程序中,你应该进行一些修改!

程序包括以下几个文件:
index.html - 登录文件

actions.php - 程序必需的FTP代码

include.php - 程序主界面,它显示文件列表和控制按钮。

让我们从 "index.html"开始吧:  
--------------------------------------------------------------------------------
<table border=0 align=center>
<form action="actions.php" method=post>
<input type=hidden name=action value=CWD>
<tr>
<td>
Server
</td>
<td>
<input type=text name=server>
</td>
</tr>

<tr>
<td>
User
</td>
<td>
<input type=text name=username>
</td>
</tr>

<tr>
<td>
Password
</td>
<td>
<input type=password name=password>
</td>
</tr>

<tr>
<td colspan=2 align=center>
<input type="submit" value="Beam Me Up, Scotty!">
</td>
</tr>

</form>
</table>
--------------------------------------------------------------------------------
这是一个登录表单,有一个服务器名称、用户名、密码,输入框。输入的变量将会被存到$server, $username 和 $password 变量中,表单提交后,调用actions.php,它将初始化FTP联接。

注意那个“hidden” 它传给action.php一个变量$action ,值为CWD。

这是action.php文件的源码:
--------------------------------------------------------------------------------
<html>
<head>
<basefont face=Arial>
</head>
<body>

<!-- the include.php interface will be inserted into this page -->

<?

//检查表单传来的数据,不全则报错,要想程序完善的话,这里应该有更全的输入检测功能
if (!$server || !$username || !$password)
{
echo "提交数据不全!";
}
else
{
// keep reading
}

?>

</body>
</html>
--------------------------------------------------------------------------------

接下来是变量 "actions". 程序允许以下的action:

"action=CWD"

改变工作目录

"action=Delete"

删除指定文件

"action=Download"

下载指定文件

"action=Upload"

上传指定文件

如果你仔细检查文件include.php,在里面包括一个HTML界面,你将会看到,它包括许多表单,每一个指向一个特定的功能,每一个表单包含一个field(通常隐藏) ,当表单提交,相应的功能将被执行。

例如:按下“删除”,"action=Delete"就被传送给"actions.php"  

为了操作这四个功能,actions.php中代码如下:   
--------------------------------------------------------------------------------
<?
// action: 改变目录
if ($action == "CWD")
{
// 具体代码
}

// action: 删除文件
else if ($action == "Delete")
{
// 具体代码
}
// action: 下载文件
else if ($action == "Download")
{
// 具体代码
}
// action: 上传文件
else if ($action == "Upload")
{
// 具体代码
}

?>
--------------------------------------------------------------------------------
以上的具体代码将会实现指定的功能,并退出循环,它们都包含以下步骤:

--------------------------------------------------------------------------------
通过定制的函数联接并登录FTP服务器
connect();

转向适当的目录

执行选择的功能

刷新列表,以察看改变的结果

通过include("include.php"),显示文件列表和控制按钮

关闭联接
--------------------------------------------------------------------------------
注意:
以下功能支持多文件操作- 即 "action=Delete" 和 "action=Download" 它们使用FOR循环来实现。
变量$cdir 和 $here 将在每一阶段实时更新。

现在终于到了我们的第三个文件,include.php 它为程序建立起一个用户界面。

"include.php" 包含三个表单,一些PHP代码获取当前的目录列表并将它们存入三个变量
$files (包括当前目录下的文件),
$file_sizes (相应的文件大小),
and $dirs (包含子目录名)

第一个表单使用$dirs 产生一个下拉式目录列表,对应于“action=CWD”。

第二个表单使用$files  $file_sizes创建一个可用的文件列表,每一个文件使用一个checkbox。这个表单的action对应于"action=Delete" and "action=Download"

第三个表单用来上传一个文件到FTP站点,如下:
--------------------------------------------------------------------------------
<form enctype="multipart/form-data" action=actions.php4 method=post>
...
<input type=file name=upfile>
...
</form>
--------------------------------------------------------------------------------
当PHP以这种方式接收到一个文件名,一些变量就产生了,这些变量指定文件的大小,一个临时的文件名以及文件的类型,最初的文件名存在$upfile_name,一旦上传后文件名便存入$upfile中(这个变量是由PHP自己创建的)
通过这些信息,我们就可以创建以下的语句了:
--------------------------------------------------------------------------------
ftp_put($result, $upfile_name, $upfile, FTP_BINARY);
--------------------------------------------------------------------------------

PHP 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
PHP个人网站架设连环讲(三)
Oct 09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
Oct 22 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
laravel 实现划分admin和home 模块分组
Oct 15 PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 PHP
我的论坛源代码(六)
Oct 09 #PHP
我的论坛源代码(五)
Oct 09 #PHP
杏林同学录(五)
Oct 09 #PHP
PHP的FTP学习(二)
Oct 09 #PHP
杏林同学录(四)
Oct 09 #PHP
PHP的FTP学习(一)
Oct 09 #PHP
PHP VS ASP
Oct 09 #PHP
You might like
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
你的编程语言可以这样做吗?
2006/09/07 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
Python端口扫描简单程序
2016/11/10 Python
python实现图片彩色转化为素描
2019/01/15 Python
在Python中COM口的调用方法
2019/07/03 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
4s店销售经理岗位职责
2014/07/19 职场文书
大学运动会加油稿
2015/07/22 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
《绝招》教学反思
2016/02/20 职场文书
分析Netty直接内存原理及应用
2021/06/14 Java/Android
在redisCluster中模糊获取key方式
2021/07/09 Redis
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers