当前位置:  编程技术>php
本页文章导读:
    ▪php判断上传文件类型的代码一例      在php判断上传文件类型的各种方法中,读文件头是最常见的方法,但是读文件头是不能真实判断文件类型的。 判断文件类型,并不容易,本文为大家介绍一个php通过读文件头判断文件类型的.........
    ▪php动态创建函数实例学习      一、创建普通函数 1)、变量函数:   代码示例: <?php      $func = 'test';            function test(){          echo 'yes !';      }            $func();  ?>    2)、随.........
    ▪php 目录遍历与删除的函数示例      代码如下: <?php /** * php目录遍历与删除操作 * Edit www. */ header("Content-type:text/html;charset=utf-8"); /** * 读取当前目录下的文件和目录 * * @param string $path 路径 * @return array 所有满足条件.........

[1]php判断上传文件类型的代码一例
    来源: 互联网  发布时间: 2013-12-24

在php判断上传文件类型的各种方法中,读文件头是最常见的方法,但是读文件头是不能真实判断文件类型的。
判断文件类型,并不容易,本文为大家介绍一个php通过读文件头判断文件类型的代码,仅供参考。
除了office文件之外,对于其它文件类型的判断还是很准的。

代码如下:
 

代码示例:
<?php
/**
 * 判断上传文件类型
 * Edit www.
*/
    function file_type($filename) 
    { 
        $file = fopen($filename, "rb"); 
        $bin = fread($file, 2); //只读2字节 
        fclose($file); 
        $strInfo = @unpack("C2chars", $bin); 
        $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); 
        $fileType = ''; 
        switch ($typeCode) 
        { 
            case 7790: 
                $fileType = 'exe'; 
                break; 
            case 7784: 
                $fileType = 'midi'; 
                break; 
            case 8297: 
                $fileType = 'rar'; 
                break;         
            case 8075: 
                $fileType = 'zip'; 
                break; 
            case 255216: 
                $fileType = 'jpg'; 
                break; 
            case 7173: 
                $fileType = 'gif'; 
                break; 
            case 6677: 
                $fileType = 'bmp'; 
                break; 
            case 13780: 
                $fileType = 'png'; 
                break; 
            default: 
                $fileType = 'unknown: '.$typeCode; 
        } 
     
        //Fix 
        if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg'; 
        if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png'; 
     
        return $fileType; 
    } 
   
    //调用
    echo file_type('start.php');   // 6063 or 6033
?>
 

不知道反过来定义 6063或者6033 就是指php的话 是不是不够严谨啊。

上面的代码,对于构造假的图片的文件类型判断,不是很好使。
此时可以考虑使用getimagesize来判断,参考代码如下:
 

代码示例:
<?php
/**
 * getimagesize判断文件类型
 * Edit www.
*/
if(in_array($attach['ext'], array('jpg', 'jpeg', 'gif', 'png', 'swf', 'bmp')) && function_exists('getimagesize') && !@getimagesize($target))  

  unlink($target); 
  upload_error('post_attachment_ext_notallowed', $attacharray); 
}
?>

    
[2]php动态创建函数实例学习
    来源: 互联网  发布时间: 2013-12-24

一、创建普通函数
1)、变量函数:
 

代码示例:
<?php 
    $func = 'test'; 
     
    function test(){ 
        echo 'yes !'; 
    } 
     
    $func(); 
?> 
 

2)、随机函数:
 

代码示例:
<?php 
    $newfunc = create_function('$a,$b', 'return $a.$b;'); 
    echo "New anonymous function: $newfunc<br>"; 
    echo $newfunc('just', 'coding'); 
?> 
 

create_function — Create an anonymous (lambda-style) function
创建一个匿名函数。这个函数主要作用在unsort和array_walk的回调函数
$a,$b为参数,'return $a,$b' 为函数的代码
3)、回调函数 :
 

代码示例:
<?php    
    //5.3 以前    
    $array = array( 'asbc', 'ddd', 'tttt', 'qqq');    
    array_walk($array,create_function('&$item','$item=strtoupper()($item);') ); //function(&$itm){$itm = strtoupper($itm);}    
    print_r($array); 
     
    //5.3 以后    
    $array = array( 'asbc', 'ddd', 'tttt', 'qqq');    
    array_walk($array,function(&$itm){$itm = strtoupper($itm);});     
    print_r($array); 
?> 
 

array_walk(array,function,userdata...)
array_walk() 函数对数组中的每个元素应用回调函数。如果成功则返回 TRUE,否则返回 FALSE。
典型情况下 function 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata ,将被作为第三个参数传递给回调函数。

二、动态创建类函数
 

代码示例:

<?php 
    /* create class */ 
    class Record { 
       
        /* record information will be held in here */ 
        private $info; 
       
        /* constructor */ 
        function Record($record_array) { 
            $record_array['body'] = 'this is a new attribution'; 
            $this->info = $record_array; 
        } 
       
        /* dynamic function server */ 
        function __call($method,$arguments) { 
            $meth = $this->from_case(substr($method,3,strlen($method)-3)); 
            return array_key_exists($meth,$this->info) ? $this->info[$meth] : false; 
        } 
       
        function from_case($str) { 
            $str[0] = strtolower()($str[0]); 
            $func = create_function('$c', 'return "_" . strtolower($c[1]);'); // function ($c) { return "_" . strtolower($c[1]); } 
            return preg_replace_callback('/([A-Z])/', $func, $str); 
        }   
    }  //by http://www.

    /* usage */ 
    $Record = new Record( 
        array( 
            'id' => 12, 
            'title' => 'Greatest Hits', 
            'description' => 'The greatest hits from the best band in the world!' 
        ) 
    ); 
     
    /* proof it works! */ 
    echo 'The ID is:  '.$Record->getId().'<br>'; // returns 12   
    echo 'The Title is:  '.$Record->getTitle().'<br>'; // returns "Greatest Hits" 
    echo 'The Description is:  '.$Record->getDescription().'<br>'; //returns "The greatest hits from the best band in the world!" 
    echo 'The Body is:  '.$Record->getBody(); //returns "The greatest hits from the best band in the world!" 
?>  
 

如果你仔细观察以上的代码,会发现重点在于:__call 和 create_function 。


    
[3]php 目录遍历与删除的函数示例
    来源: 互联网  发布时间: 2013-12-24

代码如下:

<?php
/**
 * php目录遍历与删除操作
 * Edit www.
*/
header("Content-type:text/html;charset=utf-8");

/**
* 读取当前目录下的文件和目录
*
* @param string $path 路径
* @return array 所有满足条件的文件
*/
function tlist($path){
$path = iconv('utf-8', 'gbk', $path);
if(!is_dir($path)){
throw new Exception($path."不是目录");
}
$arr = array('dir'=>array(),'file'=>array());
$hd = opendir($path);
while(($file = readdir($hd))!==false){
if($file=="."||$file=="..") {continue;}
if(is_dir($path."/".$file)){
$arr['dir'][] = iconv('gbk','utf-8',$file);
}else if(is_file($path."/".$file)){
$arr['file'][] = iconv('gbk','utf-8',$file);
}
}
closedir($hd);
echo "目录有:".implode("<br />",$arr['dir'])."<br />";
echo "文件有:".implode("<br />",$arr['file']);
}

/**
* 遍历当前目录下的文件和目录以及子文件夹中目录
*
* @param string $path 路径
* @return array 所有满足条件的文件
*/
function blist($path){
if(!is_dir(iconv("utf-8","gbk",$path))){
throw new Exception("文件夹".$path."不存在或者不是文件");
}
$arr = array();
$hd = opendir(iconv("utf-8","gbk",$path));
while(($file = readdir($hd))!==false){
if($file=="."||$file=="..") {continue;}
$newpath=iconv('utf-8', 'gbk', $path) .'/'.$file;
if(is_dir($newpath)){
$arr[] = blist($path."/".$file);
}else if(is_file($newpath)){
$arr[] = iconv('gbk','utf-8',$file);
}
}
closedir($hd);
return $arr;
}

/**
* 删除目录下的文件以及子目录
* #param string $path 路径
* #return string 删除成功返回true 失败返回false;
*/
function dirDel($path){
if(!is_dir($path)){
throw new Exception($path."输入的不是有效目录");
}
$hand = opendir($path);
while(($file = readdir($hand))!==false){
if($file=="."||$file=="..") continue;
if(is_dir($path."/".$file)){
dirDel($path."/".$file);
}else{
@unlink($path."/".$file);
}

}
closedir($hand);
@rmdir($path);
}
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3