个人认为浪人的那个小工具是通过 ftp_put,上传文件到FTP。
推测实现流程:(压缩包->)解压->获取需要上传的所有文件的FTP绝对路径->通过 ftp_put 函数上传到远程连接的FTP上。
下面是 ftp_put 的使用方法:
<?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。
至于为什么不写出来~,表示有现成的再浪费时间写没意思,另外技术不够吧。
这个东西需要的时候很方便,不需要的时候一坨屎。
11.08-续帖:
已经实现多文件上传,修改部分代码。
<?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) {
$data=rawurldecode($data);
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/
基于 @读书顶个鸟用 的单文件上传工具修改,版权归原作者。by 蒋小凌
</font>
</div>
HTML;
}
footer();
?>
请尊重原作者意愿,修改版权除了让你更加自私没有其他的了。
另外 为了安全,程序请自建自用。别人提供的ftpup不能保证你的信息安全。因代码粗糙,提交错误的信息很可能出现错误。
*使用本段代码还需要文件pclzip.lib.php,并且创建一个文件夹名为cache
*所有压缩包均解压到cache目录中,为了安全,请在此目录创建.htaccess,写入Deny from All
最后上传工具源码包:
ftpup_byxiaoling.zip(代码包传在第五页,我想有缘才tm看得到呀,防纯伸手党~)