个人认为浪人的那个小工具是通过 ftp_put,上传文件到FTP。
推测实现流程:(压缩包->)解压->获取需要上传的所有文件的FTP绝对路径->通过 ftp_put 函数上传到远程连接的FTP上。
下面是 ftp_put 的使用方法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35<?php
$ftp_server='localhost'; //FTP服务器地址
$ftp\_user\_name='lalalalala';//FTP用户名
$ftp\_user\_pass='abc';//FTP密码
// 定义变量
$local_file = '1.sql';
$server\_file = '/public\_html/1.bak';
// 连接FTP服务器
$conn\_id = ftp\_connect($ftp_server);
//验证登录服务器
$login\_result = ftp\_login($conn\_id, $ftp\_user\_name, $ftp\_user_pass);
// 下载文件
if (ftp\_get($conn\_id, $local\_file, $server\_file, FTP_BINARY)) {
echo "下载 $local_file 文件成功";
} else {
echo "下载失败";
}
$local_file = 'xr-register.zip';
$server\_file = '/public\_html/xr-register.up.zip';
if (ftp\_put($conn\_id, $server\_file, $local\_file, FTP_BINARY)) {
echo "上传 $server_file 文件成功";
} else {
echo "上传失败";
}
// 关闭ftp连接
ftp\_close($conn\_id);
?>
上面一段是从FTP下载到本地,另一段是从本地上传到FTP。
已经实现多文件上传,修改部分代码。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154<?php
// 设置报错内容等级
error\_reporting(E\_ERROR | E\_WARNING | E\_PARSE);
// 网页HEAD头function title($title){
echo <<<HTML
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
<title>{$title}-PHPBY</title>
<link rel="stylesheet" type="text/css" href="http://phpby.tk/style.css" />
</head>
<body>
HTML;
}
// 网页尾部
function footer($str=null){
if($str){
echo '<div class="error">'.$str.'</div>';
}
echo <<<HTML
<div class="footer">©2014 PHPBY All Rights Reserved.</div>
</body>
</html>
HTML;
}
function _decode($data) {
if($data!=null) {
return $data;
} else {
return false;
}
}
//判断空间是否支持FTP函数
function\_exists('ftp\_connect') or exit(footer('空间不支持FTP相关函数!'));
$host = $_POST\['host'\];
$user = $_POST\['user'\];
$pass = $_POST\['pass'\];
$port = empty($\_POST\['port'\]) ? 21 : $\_POST\['port'\];
if(!empty($host)){
title('快捷安装脚本上传结果');
echo '<div class="header">快捷安装脚本上传结果</div>';
$path = $_POST\['path'\]; // 远程路径
//这里"fileadmin"就是匹配POST过来的zipfile,fileadmin.zip为与此文件同级目录下的压缩包,初次使用自动解压
$zipfile_arr = array(
'fileadmin' => 'fileadmin.zip',
'installzip' => 'installzip.zip'
);
$zipfile = $zipfile\_arr\[$\_POST\['zipfile'\]\] ? $zipfile\_arr\[$\_POST\['zipfile'\]\] : exit(footer('没有找到此安装程序!'));
if(!$conn = @ftp_connect($host,$port)){ //判断FTP主机是否连接成功
echo '<div class="error">ERROR: 无法连接FTP主机:'.$host.'</div>';
}elseif(!@ftp_login($conn,$user,$pass)){ //判断FTP用户是否登陆成功
echo '<div class="error">ERROR: 无法登陆FTP主机:'.$user.'</div>';
}else{
//判断是否存在解压记录
if(!is\_file('./cache/'.$\_POST\['zipfile'\].'/temp.cache')){
//压缩文件
$_path='./'.$zipfile;
//解压目录
$\_dirpath='./cache/'.$\_POST\['zipfile'\];
//解压原始文件
require 'pclzip.lib.php';
$pk=new pclzip(\_decode($\_path));
if(($count=$pk->extract(PCLZIP\_OPT\_PATH,$_dirpath))==false) {
exit(footer('Hello,压缩包 '.basename(\_decode($\_path)).' 解压失败!'));
}
echo 'Hello,压缩包 '.basename(\_decode($\_path)).' 解压成功!';
echo '<div class="big\_board"><div class="board\_title"></div></div>->>Hello,共解出档案 '.count($count).' 个哦!';
//print_r($count);
@file\_put\_contents('./cache/'.$_POST\['zipfile'\].'/temp.cache',serialize($count));
}
if(@ftp_mkdir($conn,$path)) echo '<div class="success">路径'.$path.'创建成功!</div>';//如果用户输入的目录不存在则尝试创建
$handle = fopen('./cache/'.$_POST\['zipfile'\].'/temp.cache',"r");
$count = unserialize(fread($handle, filesize ('./cache/'.$_POST\['zipfile'\].'/temp.cache')));
foreach($count as $filename){
$local = './cache/'.$\_POST\['zipfile'\].'/'.$filename\['stored\_filename'\]; // 要上传的本地文件
$sfile = $path.'/'.$filename\['stored_filename'\];
// 判断是否为文件(要上传的本地文件是否存在)
if(is_file($local)){
// 上传文件
if(@ftp\_put($conn,$sfile,$local,FTP\_BINARY)){
echo '<div class="success">文件'.$filename\['stored_filename'\].'上传成功!</div>';
}else{
echo '<div class="error">文件'.$filename\['stored_filename'\].'上传失败!</div>';
}
}else{
// 创建目录
if(@ftp_mkdir($conn,$sfile)){
echo '<div class="success">目录'.$filename\['stored_filename'\].'创建成功!</div>';
}else{
echo '<div class="error">目录'.$filename\['stored_filename'\].'创建失败!</div>';
}
}
}
}
}else{
title('一键安装程序');
echo <<<HTML
<div class="lol">
<div class="lo">一键安装程序</div>
<form action="?" method="post" id="login" style="text-align:center;">
FTP服务器
<input type="text" name="host" value=""/><hr/>
FTP端口
<input type="text" name="port" value="21"/><hr/>
FTP用户
<input type="text" name="user" value=""/><hr/>
FTP密码
<input type="password" name="pass"/><hr/>
远程路径
<div class="nice">
输入安装目录(可自动创建新目录)
</div>
<input type="text" name="path" value="/public_html/"/><hr/>
安装程序
<select name="zipfile">
<option value="fileadmin">爱特文管(fileadmin)</option>
<option value="installzip">一键安装(installzip.php)</option>
</select>
<input type="submit" value="一键上传"/>
</form>
</div>
<div class="lol">
<div class="lo">使用帮助</div>
<font style="color:#90f;font-size:12px">
远程路径中可以自动创建空目录,但是请注意,如果 /public\_html/new/ 路径不存在,无法直接创建 /public\_html/new/new/
</font>
</div>
HTML;
}
footer();
?>
为了安全,程序请自建自用。别人提供的ftpup不能保证你的信息安全。因代码粗糙,提交错误的信息很可能出现错误。使用本段代码还需要文件pclzip.lib.php,并且创建一个文件夹名为cache 所有压缩包均解压到cache目录中
为了安全,请在此目录创建.htaccess,写入Deny from All