首页 > PHP教程

用PHP控制FTP文件上传

利用PHP,你总是可以有多种方式来完成某个特定的任务。我们就拿文件上传举个例子。当然了,你可以按照传统的方式来使用HTTP文件上传,把文件直接传输到Web服务器磁盘上。你还可以用更加奇异的方式上传,用FTP协议两步就完成上传:从你的本地硬盘到Web服务器,然后再到FTP服务器。

PHP在本机同时支持FTP和HTTP上传,所以你可以根据自己应用程序的设计需要进行最佳的选择。使用PHP的FTP函数进行文件传输几乎与使用传统的FTP客户端相同

阅读全文

php多文件上传

/*
    多文件上传类
    修改:Linvo 2008-2-15
*/
class more_file_upload
{
    const 
FILE_PATH='../upfileclass/uploadfile/'
;
    var 
$file_type
;
    var 
$file_type_array
;
    var 
$file_type_real_array
;
    var 
$file_type_string
;
    var 
$file_name
;
    var 
$file_size
;
    var 
$file_tmp_name
;
    var 
$file_error
;
    var 
$handledate
;
    static 
$totalsize=0
;

    function 
__construct($file_name,$file_error,$file_size,$file_tmp_name,$file_type
){          
        
$this->handledate=date('m-d-Y'
);
        if (!empty(
$file_name
)){
            
$this->file_name $file_name
;
            
$this->file_error $file_error
;
            
$this->file_size $file_size
;
            
$this->file_tmp_name $file_tmp_name
;
            
$this->file_type $file_type
;
            
$this->file_type_array = array('/''image/gif''image/jpg''image/jpeg''image/pjpeg''image/png'
);
            
$this->file_type_real_array = array(0.1'jpg'=>74707370'gif'=>7173'bmp'=>6677'png'=>807871
);
            
            
$this->show_execute_message($this->file_error,$this->file_name,$this->file_type,$this->file_size
);
        }
    }
    
    function 
__destruct
(){
        
$this->file_name NULL
;
        
$this->file_error NULL
;
        
$this->file_size NULL
;
        
$this->file_tmp_name NULL
;
        
$this->file_type NULL
;
        
self::$totalsize 0
;
    }
    
    function 
show_execute_message($smfileerror,$smfilename,$smfiletype,$smfilesize
){
        if(
$smfileerror>0
){
            switch (
$smfileerror
){
                case 
1$smfilemessage='<strong>文件超过服务器的约定大小!</strong>'
;break;
                case 
2$smfilemessage='<strong>文件超过指定的文件大小!</strong>'
;break;
                case 
3$smfilemessage='<strong>文件只上传了部分!</strong>'
;break;
                case 
4: echo "$this->file_name ".'文件上传失败!<br/>'
;break;
            }
            
self::__destruct
();                   
        }else{
            
$smfiletypeflag array_search($smfiletype,$this->file_type_array
);

            
//进行真实格式验证
            
if($smfiletypeflag != false
){
                
$file fopen($this->file_tmp_name"rb"
);
                
$bin fread($file10
);
                
fclose($file
);
                
$strInfo  = @unpack("c10chars"$bin
);
                
$typeCode intval($strInfo['chars1'].$strInfo['chars2'
]);
                
$smfiletypeflag array_search($typeCode$this->file_type_real_array
);
                if(
$smfiletypeflag == false){ 
//判断是否是png图片
                    
$typeCode intval($strInfo['chars2'].$strInfo['chars3'].$strInfo['chars4'
]);
                    
$smfiletypeflag array_search($typeCode$this->file_type_real_array
);
                    if(
$smfiletypeflag == false){ 
//判断是否是jpg图片
                        
$typeCode intval($strInfo['chars7'].$strInfo['chars8'].$strInfo['chars9'].$strInfo['chars10'
]);
                        
$smfiletypeflag array_search($typeCode$this->file_type_real_array
);
                    }
                }
            }

            if(
$smfiletypeflag == false
){
                
$smfilemessage='<strong>文件类型不对,请核实!</strong>'
;
                
self::__destruct
();        
            }else{
                
$resflag $this->move_file($this->file_tmp_name,$this->file_name
);
                if (
$resflag == 1
){
                    
$smfilemessage '文件上传成功!'
;
                    
self::$totalsize += intval($smfilesize
);
                    
self::__destruct
();
                }else{
                    
$smfilemessage '<strong>文件上传失败!</strong>'
;
                    
self::__destruct
();
                }
            }
        }

        
$smfilesizeformat $this->size_BKM($smfilesize
);
        echo 
'<tr>
            <td align="left" >'
.$smfilename.
'</td>
               <td align="center" >'
.$smfiletype.
'</td>
               <td align="center" >'
.$smfilesizeformat.
'</td>
               <td align="center" >'
.$smfilemessage.
'</td>    
            </tr>'
;                
    }
    
    function 
move_file($mvfiletmp,$mvfilename){ 
//移动文件
        
$mvfilenamearr explode('.',basename($mvfilename
));
        
$mvfilenamearr[0] = $this->rand_string
();
        
$mvfilename implode('.',$mvfilenamearr
);

        if (
is_uploaded_file($mvfiletmp
)){
            
$uploadfile self::FILE_PATH."$mvfilename"
;
            
$result move_uploaded_file($mvfiletmp,$uploadfile
);
            return 
$result
;
        }        
    }

    function 
rand_string
(){
        
$string md5(uniqid(rand().microtime
())); 
        return 
$string
;
    }

    function 
size_BKM($size){ 
// B/KB/MB单位转换
        
if($size 1024

        {
            
$size_BKM = (string)$size " B"
;
        } 
        elseif(
$size < (1024 1024
)) 
        {
            
$size_BKM number_format((double)($size 1024), 1) . " KB"
;
        }else 
        { 
            
$size_BKM number_format((double)($size / (1024*1024)),1)." MB"

        } 
        return 
$size_BKM
;
    }
}

阅读全文

动态URL静态化

动态URL静态化的主要目的,其一是搜索引擎优化(SEO),其二是面向用户友好。动态URL静态化是把一个动态地址转化成一个静态地址。其实,这个静态地址的内容还是从动态地址来的,只是看起来,类似一个静态地址。例如,本站页面

阅读全文

php 简单清析文件上传

function Uploadfile(){
   //文件保存目录路径
   $save_path = '../upload/';
   //定义允许上传的文件扩展名
   $ext_arr = array('rar','zip');
   //最大文件大小
   $max_size = 1000000;
   //更改目录权限
   @mkdir($save_path, 0777);
   
   
   //有上传文件时
   if (empty($_FILES) === false) {
    //原文件名
    $file_name = $_FILES['fileData']['name'];
    //服务器上临时文件名
    $tmp_name = $_FILES['fileData']['tmp_name'];
    //文件大小
    $file_size = $_FILES['fileData']['size'];
    //检查目录
    if (@is_dir($save_path) === false) {
     alert("上传目录不存在。");
    }
    //检查目录写权限
    if (@is_writable($save_path) === false) {
     alert("上传目录没有写权限。");
    }
    //检查是否已上传
    if (@is_uploaded_file($tmp_name) === false) {
     alert("临时文件可能不是上传文件。");
    }
    //检查文件大小
    if ($file_size > $max_size) {
     alert("上传文件大小超过限制。");
    }
    //获得文件扩展名
    $temp_arr = explode(".", $file_name);
    $file_ext = array_pop($temp_arr);
    $file_ext = trim($file_ext);
    $file_ext = strtolower($file_ext);
    //检查扩展名
    if (in_array($file_ext, $ext_arr) === false) {
     alert("上传文件扩展名是不允许的扩展名。");
    }
    //移动文件
    if (move_uploaded_file($tmp_name, $file_path) === false) {
     alert("上传文件失败。");
    }
 } 

阅读全文

下拉透明菜单一部分

下拉透明菜单


<script language="JavaScript">
var mmenus    = new Array();
var misShow   = new Boolean();
misShow=false;
var misdown   = new Boolean();
misdown=false;
var mnumberofsub=0;
var musestatus=false;
var mpopTimer = 0;
mmenucolor='#89CB10';mfontcolor='MenuText';mmenuoutcolor='#ADEF34';mmenuincolor='#B5E74E';mmenuoutbordercolor='#ECFA3A';mmenuinbordercolor='#5A2614';mmidoutcolor='#A9DA1D';mmidincolor='#799310';mmenuovercolor='#004080';mitemedge='0';msubedge='1';mmenuunitwidth=66;mmenuitemwidth=140;mmenuheight=25;mmenuwidth='100%';mmenuadjust=0;mmenuadjustV=0;mfonts='font-family: 宋体; font-size: 9pt; color: MenuText; ';mcursor='hand';
var swipeSteps = 4;
var swipemsec = 25;
var swipeArray = new Array();
function swipe(el, dir, steps, msec) {
 if (steps == null) steps = swipeSteps;
 if (msec == null) msec = swipemsec;
 if (el.swipeIndex == null)
  el.swipeIndex = swipeArray.length;
 if (el.swipeTimer != null)
  window.clearTimeout(el.swipeTimer);
 swipeArray[el.swipeIndex] = el;
 el.style.clip = "rect(-99999, 99999, 99999, -99999)";
 if (el.swipeCounter == null || el.swipeCounter == 0) {
  el.orgLeft  = el.offsetLeft;
  el.orgTop  = el.offsetTop;
  el.orgWidth = el.offsetWidth;
  el.orgHeight  = el.offsetHeight;
 }
 el.swipeCounter = steps;
 el.style.clip = "rect(0,0,0,0)";
 window.setTimeout("repeat(" + dir + "," + el.swipeIndex + "," + steps + "," + msec + ")", msec);
}
function repeat(dir, index, steps, msec) {
 el = swipeArray[index];
 var left   = el.orgLeft;
 var top    = el.orgTop;
 var width  = el.orgWidth;
 var height = el.orgHeight;
 if (el.swipeCounter == 0) {
  el.style.clip = "rect(-99999, 99999, 99999, -99999)";
  return;
 }
 else {
  el.swipeCounter--;
  el.style.visibility = "visible";
  switch (dir) {
   case 2:
    el.style.clip = "rect(" + height*el.swipeCounter/steps + "," + width + "," + height + "," + 0 + ")";
    el.style.top  = top - height*el.swipeCounter/steps;
    break;
   case 8:
    el.style.clip = "rect(" + 0 + "," + width + "," + height*(steps-el.swipeCounter)/steps + "," + 0 + ")";
    el.style.top  = top + height*el.swipeCounter/steps;
    break;
   case 6:
    el.style.clip = "rect(" + 0 + "," + width + "," + height + "," + width*(el.swipeCounter)/steps + ")";
    el.style.left  = left - width*el.swipeCounter/steps;
    break;
   case 4:
    el.style.clip = "rect(" + 0 + "," + width*(swipeSteps - el.swipeCounter)/steps + "," + height + "," + 0 + ")";
    el.style.left  = left + width*el.swipeCounter/steps;
    break;
  }
 
  el.swipeTimer = window.setTimeout("repeat(" + dir + "," + index + "," + steps + "," + msec + ")", msec);
 }
}
var mtmpleft="";
var mtmptop="";
function hideSwipe(el) {
 window.clearTimeout(el.swipeTimer);
 el.style.visibility = "hidden";
 el.style.clip = "rect(-99999, 99999, 99999, -99999)";
 el.swipeCounter = 0;
 if(mtmpleft!="")el.style.left = mtmpleft;
 if(mtmptop!="")el.style.top = mtmptop;
}

阅读全文

PHP套接字编程

套接字编程,一般使用c或c 。非凡的在web应用程序开发中,常用perl实现套接字。除此以外,用php进行套接字编程也是一个选择。Php可以胜任吗?当然可以。Php是一门高质量的web应用程序开发语言,他的许多特性可以处理众多的任务,网络编程也不例外。

1. 理解套接字
Mail、ftp、telnet、name和finger这些服务都是在一个专用的公开的端口上提供的,通过连接到这些端口,客户程序就能够访问这些服务。这与现实生活是相似的

阅读全文

下拉透明菜单二

function mMenu(caption,command,target,img,sizex,sizey,pos){
 this.items = new Array();
 this.caption=caption;
 this.command=command;
 this.target=target;
 this.img=img;
 this.sizex=sizex;
 this.sizey=sizey;
 this.pos=pos;
 this.id=mMenuRegister(this);
}
function mMenuAddItem(item)
{
  this.items[this.items.length] = item
  item.parent = this.id;
  this.children=true;
}

阅读全文

详细阐述PHP环境下如何将GBK编码转成UTF-8格式

apache 字符集 GB 2312
mysql 字符集 GBK
现要从 mysql 中提出信息(GBK) 写入到 XML 中
XML中的编码格式是 UTF-8

那么,如何将GBK编码成 UTF8 ??

具体介绍:
前一阵子见到了qiushuiwuhen君的关于gbk,unicode,big5的转换的文章
但是多少有一些不太大的问题

于是我设计了一个负责字符转换的类,修正了其中的一些不足,增加了部分功能,以后我会不断扩充该类,来支持更多的字符集

增加了如下几点:

unicode->gbk 符号部分的转换
欧元符的识别
big5,Unicode,GBK之间的相互转换,前提是只转换共同的字符集部分,

使用说明:
暂时程序支持以下字符编码方式:
GBK,BIG5,UTF-16BE(Unicode big-endian字节顺序),UTF-16LE(Unicode little-endian字节顺序),UTF-8
默认输入编码方式为GBK,默认输出编码方式为UTF-16BE;
该类别提供两个函数用来修改输入和输出编码方式:
修改输入编码方式 boolean SetGetEncoding(string $GetEncoding)
修改输出编码方式 boolean SetToEncoding(string $ToEncoding)
函数参数只能使用上述5种编码方式,区分大小写,如GBK不能写成gbk
假如设置成功,返回true,假如使用了错误的编码名,返回false,并现实错误信息

函数
string EncodeString(string $String)
负责进行字符编码转换,返回转换后的字符串

使用前,请将var $FilePath=""变量该为该程序文件的绝对路径,否则将会找不到数据文件

例子:
将gbk编码的字符串转化为UTF-8编码:

$s="GBK编码";
$CharEncoding=new Encoding();
$CharEncoding->SetGetEncoding("GBK")||die("编码名错误");
$CharEncoding->SetToEncoding("UTF-8")||die("编码名错误");
echo $CharEncoding->EncodeString($s);

在浏览器中使用UTF-8编码察看,将会看到正确的字符

阅读全文

动态网页制作PHP常用的正则表达式

匹配中文字符的正则表达式: [u4e00-u9fa5]

  匹配双字节字符(包括汉字在内): [^x00-xff]

  应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

  匹配空行的正则表达式: n[s| ]*r

  匹配HTML标记的正则表达式: /<(.*)>.*</>|<(.*) />/

  匹配首尾空格的正则表达式: (^s*)|(s*$)

  应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function() {
return this.replace(/(^s*)|(s*$)/g, "");
}

  利用正则表达式分解和转换IP地址:

  下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的javascript程序:

function IP2V(ip) {
re=/(d ).(d ).(d ).(d )/g //匹配IP地址的正则表达式
if(re.test(ip)) {
return RegExp.*Math.pow(255,3)) RegExp.*Math.pow(255,2)) RegExp.*255 RegExp.*1
}
else {
throw new Error("Not a valid IP address!")
}
}

  不过上面的程序假如不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:" (ip[0]*255*255*255 ip[1]*255*255 ip[2]*255 ip[3]*1))

  匹配Email地址的正则表达式: w ([- .]w )*@w ([-.]w )*.w ([-.]w )*

  匹配网址URL的正则表达式: http://([w-] .) [w-] (/[w- ./?%&=]*)?

  利用正则表达式去除字串中重复的字符的算法程序:

var s="abacabefgeeii"
var s1=s.replace(/(.).*/g,"")
var re=new RegExp("[" s1 "]","g")
var s2=s.replace(re,"")
alert(s1 s2) //结果为:abcefgi

  用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.etoow.com/page1.htm"
s=s.replace(/(.*/)([^.] ).*/ig,"")
alert(s)

  利用正则表达式限制网页表单里的文本框输入内容:

  用正则表达式限制只能输入中文:

onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

  用正则表达式限制只能输入全角字符:

onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

  用正则表达式限制只能输入数字:

onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

  用正则表达式限制只能输入数字和英文:

onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,'')

阅读全文

动态网页技术PHP中关于类的几点使用技巧

对类的摸索~~俺用了半年时间才大概理解类的作用和实现。主要是没有一篇能让我理解的文章(之前没接触过任何OO的东西)。

  以我的观点来说说PHP中的Class,用于表达的语言都是非正式的语言,也不能确定是否正确。

  建立一个类很简单:

class my_class {}

  类到底干什么呢?很多人都说是什么黑匣子,我在这里称它为一个独立的整体。我们只知道类名,而不知道里面有什么东西。那么,该如何使用这个类呢?

  首先:要知道它里面是否定义了公共的变量--专业术语上称它为“属性”。
  其次:要知道它里面定义了什么函数--专业术语中称它为“方法”。
  我都被这些专业术语搞糊涂了,所以干脆不理它了。

  类中的如何定义公共变量,它有什么作用呢?

  很简单,我们来扩充 my_class 类:

class my_class
{
var $username;
}

  看上面很简单,我们定义了一个公共的变量,只是用 var 空格 普通变量名构成。它有什么用呢?考虑一下函数中,假如我们要访问函数外的变量,是不是要先 global 一下呢?这个想实现的效果也是如此,它是想让这个类中的所有函数都能访问它,而它区别于函数的一个地方,是类的外部也可以随时访问和控制这个变量,我随后再讲外部如何访问它。还有一个区别,不能用复杂的语句给这个变量赋值(具体的等理解了类以后自己去看规则)。

  给它一个默认值:

class my_class
{
var $username = "深空";
}

OK,定义了一个公共的变量了,接下来定义一个函数(也就是所谓的“方法”):

class my_class
{
var $username = "深空";

function show_username()
{
}
}

这个定义函数跟普通的定义函数形式上没什么区别了。简单就好,定义一个打印 $username 的函数:

class my_class
{
var $username = "深空";

function show_username($username)
{
echo $username;
}
}

  到这里可能某些人开始迷糊了,呵呵,最要害的就是这里了,看清楚了。现在有三个 $username 了。到底哪个是哪个啊~~

阅读全文

php图片上传代码


<?php

if(empty($_GET[submit
]))

{

?>
<form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF']?>?submit=1" method="post">
Send this file: <input name="filename" type="file">
<input type="submit" value="确定上传">
</form>
<?php 
}else{
    
$path="uploadfiles/";        
//上传路径

//echo $_FILES["filename"]["type"];


if(!file_exists($path
))
{
    
//检查是否有该文件夹,如果没有就创建,并给予最高权限
    
mkdir("$path"0700
);
}
//END IF
//允许上传的文件格式
$tp = array("image/gif","image/pjpeg","image/png"
);
//检查上传文件是否在允许上传的类型
if(!in_array($_FILES["filename"]["type"],$tp
))
{
    echo 
"格式不对"
;
    exit;
}
//END IF
if($_FILES["filename"]["name"
])
{
        
$file1=$_FILES["filename"]["name"
];
        
$file2 $path.time().$file1
;
        
$flag=1
;
}
//END IF
if($flag$result=move_uploaded_file($_FILES["filename"]["tmp_name"],$file2
);
//特别注意这里传递给move_uploaded_file的第一个参数为上传到服务器上的临时文件
if($result
)
{
    
//echo "上传成功!".$file2;
    
echo "<script language='javascript'>"
;
    echo 
"alert("上传成功!");"
;
    echo 
" location='add_aaa.php?pname=$file2'"
;
    echo 
"</script>"
;
}
//END IF


}

?>

阅读全文