文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Uber-upload的使用

Uber-upload的使用

时间:2007-05-23  来源:yangzhx

ber-Upload是一个结合PHP,PERL的上传程序。总结一下对其的分析和改造情况。因为时间关系,没有做更深入研究,而且对PERL不是很熟悉,只对做一个表面功夫。 1. PERL代码分析
其有两个部分,一是核心的上传程序,一般放在cgi-bin目录下(这个目录在APACHE中设置)。有以下几个文件:uu_default_config.pm uu_lib.pm uu_upload.pl  uu_ini_status.pl
uu_default_config.pm 上传的配置文件,把所的配置信息写在一个数组中,有以下的配置选项:
 

config_file_name=> 'uu_default_config',
temp_dir => '/var/tmp/', (上传的临时路径,777权限)
upload_dir=> '/var/www/html/culture/usrupfile/20070515/', (上传的路径,可以动态改变…)
unique_upload_dir=> 0, 如果设置为1,则每上传一个文件放到一个新建的文件夹下
unique_upload_dir_length => 16, 目录的长度
unique_file_name=> 0, (设置为1,则上传的文件以随机生成的新文件名重命名,最好设置为1)
unique_file_name_length => 16,
create_files_by_rename => 1,
max_upload => 200097152, 最大上传的字节数(一次上传的总量)
overwrite_existing_files => 0,
redirect_after_upload => 1, 上传完成后,网页是否重定向
redirect_url => 'http://' . $ENV{'SERVER_NAME'} . '/culture/fup/uu_finished.php', 重定向到的文件名,有些变量从系统变量中取出。可以自行设置
disallow_extensions=> '(sh|php|php3|php4|php5|py|shtml|phtml|cgi|pl|plx|htaccess|htpasswd)', 不允许上传的文件扩展名
allow_extensions => '(jpg|jpeg|gif|bmp|gz|rmvb|mp3)',
link_to_upload => 0, 如果设置为1,则上传完成后,有文件的链接。
path_to_upload => 'http://'. $ENV{'SERVER_NAME'} . '/culture/usrupfile/20070515/',

2. PHP代码分析
这些文件放到可以执行PHP的路径下,位置任意,有以下几个文件

uu_conlib.php:配置文件,相关的参数有以下:
$path_to_upload_script = '/cgi-bin/uu_upload.pl'; 执行文件上传的PL文件
$path_to_ini_status_script = '/cgi-bin/uu_ini_status.pl';
$default_config_file= 'uu_default_config';
$disallow_extensions = '/(sh|php|php3|php4|php5|py|shtml|phtml|cgi|pl|plx|htaccess|htpasswd|exe|dll)$/i';
$allow_extensions = '/(jpg|jpeg|gif|bmp|mp3|wmv|rm|rmvb|avi|mov|mpeg|mpg|zip|rar|gz|bz2|doc|ppt|xls)$/i';
(在PERL的配置文件中也有,好像起作用的是这个。。。。)
$check_file_name_format = 1; 是否对上传文件名字格式进行检查
$check_disallow_extensions = 1; 是否禁止上传不允许的扩展名的文件
$check_allow_extensions = 1; 是否对允许的文件类型进行检查
$check_null_file_count = 1; 是否检查空文件
$check_duplicate_file_count = 1; 是否检查相同的文件
$progress_bar_width = 300; 上传条的宽度(PX)

 

uu_file_upload.php,进行文件上传文件,包括了选择上传文件的表单显示,上传过程中的进度条和状态显示等,只对部分信息进行了中文化,而没有对代码进行修改,分析放到以后吧。

uu_finished.php,上传完成后显示的信息,这个文件也在PL的配置文件中出现过,当上传操作完成后,重定向到此。为了能够取得上传以后的文件路径,对源代码进行了小的改动。
① 新建了一个变量$file_list_up ,存放上传文件的路径名+文件名
② L86,L89,L109加入  $file_list_up .= "$uploaded_path$uploaded_file_name".'\n';,变量$uploaded_path与$uploaded_file_name分别是上传文件的路径和文件名(注 连接\n是为了加TEXTAREA的而进行的修改,其他信息可以根据需要进行修改)
③ 加入一个SCRIPT函数如下,把文件路径写入到主窗口中

function writeForm( msg){
  var mymsg = msg;
  var orgin = window.opener.myform.downurls.value; (通过window.opener得到主窗口,myform是表单的名字,downurls是一个TEXTAREA的名字)
  orgin+=mymsg;
  window.opener.myform.downurls.value= orgin;
  alert("写入成功,!") ;
  //window.self.close();

   return false;
}


 

④ 加入一个按钮如下,把得到的文件信息$file_list_up当做变量传到JS函数writeForm中去。
<input type="button" value="直接写入" onClick="javascript:return writeForm('<? print $file_list_up;  ?>');">

3. 动态改变上传的路径
为了更好的时行备份,可以动态改变上传文件的路径,其实只要修改配置文件中的相关内容就可以了,如果手动改,非得麻烦的吐了不可,写了一个SHELL脚本,不是很好,因为对SHELL的学习也是刚刚开始,将就着用了。

#!/bin/bash

#路径是按日期存放的,也可以改成按月来存放

mydir=`date +%Y%m%d`
cd /var/www/html/culture/usrupfile
#如果目录已经存在,则只改变其权限,否则创建目录

if [ -d $mydir ]; then
  echo "Direcotry $mydir exsist and chmod 777 to it"
 else
   mkdir $mydir
   echo "Dir $mydir is created and mod is changed to 777"
fi
chmod 777 $mydir
cp index.html $mydir
cd /var/www/cgi-bin
#把origin.pm文件中的 usrupfile/ 修改成usrupfile/$mydir,替换uu_default_config.pm文件

sed -e "s/usrupfile\//usrupfile\/$mydir\//g" origin.pm > tmp.pm
mv tmp.pm uu_default_config.pm
chmod 755 *
echo "uu_default_conifg.pm is changed"
cd /var/www/html/culture/fup
#同样的道理,替换config.incphp中的路径信息

sed -e "s/usrupfile\//usrupfile\/$mydir\//g" conf.php> tmp.php
mv tmp.php config.inc.php
chmod 755 *
echo "config.inc.php is changed"
exit 0

 

4. 几点说明
① JS是很烦人的,那个打开上传窗口的按钮可以做成这样
<input type="button" value="上传文件" onclick="javascript:openwinx('/fup/uu_file_upload.php','uploads','500','300')">
② Openwinx函数中第二个函数是打开窗口的名字,当再打开一个窗口与之同名时,只是打开一个窗口,会把原有内容用新的URL进行刷新
③ 在对textarea表单的内容进行写入时,老是不能换行,还是小超提醒,把uu_fiished.php中的 $file_list_up .= "$uploaded_path$uploaded_file_name\r\n';修改为$file_list_up .= "$uploaded_path$uploaded_file_name”.’\r\n',FT一个!
④ 有些内容用中文替换后,网页显示为乱码,没关系,用UEDIT或用iconv命令转换一下编码再进行编辑就可以了。

相关阅读 更多 +
排行榜 更多 +
试着飞手游下载

试着飞手游下载

休闲益智 下载
血染小镇(功能菜单)中文版下载

血染小镇(功能菜单)中文版下载

飞行射击 下载
泰坦之旅高爆版下载

泰坦之旅高爆版下载

角色扮演 下载