php 获取文件名后缀名扩展名

 更新时间:2016年11月25日 15:57  点击:1928

 在php 有这么二个函数 end() 与 current() 前者是读取数组最后一个元素值,后者是读取数组第一个值,
 那么下面我们来看看我利用end也读取文件111cn.gif文件后缀名gif
*/
$file = 'www.111cn.net.gif';
echo getfix( $file );

//得到的值为gif 这种方法最简单也最实例了,好下面我们来看看方法二一种用substr读取扩展名方法

$file ='aaa.gif';
echo substr($file,strpos($file,'.')+1);

//方法三 还是用数组

$file = '111cn.gif';
$d111cn = explode('.',$file);
echo $d111cn[count($d111cn)-1];

function getfix($l1){
 return end(explode('.', $l1));
}

// 本文章原创于www.111cn.net 转载注明出处

*/
$dir ='/www.111cn.net';

 if(strstr($src, "http://") && !strstr($src, $_SERVER['HTTP_HOST'])){
  $src = getimg($src);
 } 

 function getimg($l1){
  $l2 = $dir.'/'.substr(md5($l1),10,10).strrchr($l1,".");
  //文件存在,直接返回地址
  if(file_exists($l2)){   
   //echo "exits...";
   return $l2;
  }
  
  //开始获取文件,并返回新路径 
  $img = file_get_contents($l1);     
  if($img){
   if(!is_dir($dir)){
    @mkdir($dir);
   } 
   savefile($l2, $img);
   //echo "file_get..";
   return $l2;
  }    
 }
 
 //保存文件(文件, [内容])
 
 function savefile($l1, $l2=''){  
  if(function_exists(file_put_contents)){
   file_put_contents($l1, $l2);
  } else{
   $fp = @fopen($l1, 'wb');
   @fwrite($fp, $l2);
   fclose($fp);
  }
 }
 
 
/*

strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。
file_exists 判断文件是否存在,是返回ture或1 否返回false或0
file_get_contents() 函数把整个文件读入一个字符串中。
mkdir 创建目录,成功ture 否false
file_put_contents() 函数把一个字符串写入文件中 与依次调用 fopen(),fwrite() 以及 fclose() 功能一样

 本程序是首页判断我们读取地址是网络的还是本地的,如果是本服务器的图片地址就不加处理否则就把远程服务器的图片或文件下载到本地服务器上。
 
*/
 
  
// 本文章原创于www.111cn.net 转载注明出处

 IIS 设置完后,支持PHP。但是。连接数据库教程的时候。发现 undefined function mysql_connect() ,php教程.ini已经开启dll 了。DLL也复制到系统默认文件中了。但是事情还是如故!
 
 打开你安装目录的php.ini文件, ctrl+f搜索 将前面的";"php_mysql.dll
 
 将PHP.ini中以下几个参数前面的“;”去掉:
 ;extension=php_dba.dll
 ;extension=php_gd2.dll
 ;extension=php_mbstring.dll
 ;extension=php_mcrypt.dll
 ;extension=php_mysql.dll
 ;extension=php_mysqli.dll
 ;extension=php_pdo.dll
 ;extension=php_pdo_mysql.dll
 保存文件,重启IIS
 
 本文章原创于www.111cn.net 转载注明出处。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <TITLE>生成缩略图</TITLE>
</HEAD>
 <BODY>
<?php
$c = array('dir'=>'./images','newdir'=>'./thumb','w'=>'200','h'=>'200');
//只处理文件名中含有small的文件,如果处理所有文件,请设置为 '.'
$only = '.';

//如果不希望覆盖已经存在的图片 将此行设为0;
$over = 1;

//是否处理GIF图,0为不处理
$regif = 1;

 

if($_GET['do']=='start'){
 $file = array();
 $dir = $_POST['dir'];
 $newdir = $_POST['newdir'];
 $w = intval($_POST['w']);
 $h = intval($_POST['h']);
 $d = @dir($dir) or die('目录不存在!'); 
 $config = "<?php return array('dir'=>'".$dir."','newdir'=>'".$newdir."','w'=>'".$w."','h'=>'".$h."'); ?>";
 savefile($c, $config); 
 while ($a=$d->read()){
  $type = substr(strrchr($a,"."),1);
  if($a!=='.' && $a!=='..'){
   if(is_dir($dir.'/'.$a)){
    $zdir[]=$a;
   } elseif($type=='jpg' || $type=='gif' || $type=='bmp' || $type=='png') {
    if(strstr($a, $only)){
     $file[]=$dir.'/'.$a;
    }
   }   
  }
 }
 $rand = rand(100,999);
 $img = new image($dir, $newdir);
 $img->over = $over;
 $img->regif= $regif;
 echo "<div style='width:800px'>";
 foreach ($file as $key){
  $src = $img->reImg($key, $w, $h);
  echo "<div style='float:left;border:#666666 1px dotted; width:$w px; height:$h px; padding: 5px; margin:5px;'><img src=$src?$rand></div>";
 }
 echo "</div>";
 die("<br><br><label> <input name="go" type="button" id="go" onClick="location='index.php'" value=" www.111cn.net继 续 处 理 新 的 图 片 "></label><br><br>");
}
?>
 <div style="clear:both; width:250px; height:110px; border:#006633 1px dashed; padding:5px; font-size:12px; color:#009933">
 <form name="form1" method="post" action="?do=start">
   <label>源目录:
   <input name="dir" type="text" id="dir" value="<?=$c['dir']?>">
</label>
<br><br>
<label>保存到:
<input name="newdir" type="text" id="newdir" value="<?=$c['newdir']?>">
</label>
<br><br>
<label>宽 &nbsp;高:
<input name="w" type="text" id="w" value="<?=$c['w']?>" size="7" maxlength="3">
X
<input name="h" type="text" id="h" value="<?=$c['h']?>" size="7" maxlength="3">
</label>
  <br>
  <br>  
   <label>  
   <input type="submit" name="search" id="search" value="生 成">
   </label>  
 </form>
 
</div>
&copy;2008 <a href="http://www.111cn.net" target=_blank>wbsifan</a>
</BODY>
</HTML>
<?
<?php
//创建目录(目录, [模式])
function mkdirs($l1, $l2 = 0777){
 if(!is_dir($l1)){
  //如果目录不存在,递归建立
  mkdirs(dirname($l1), $l2);  
  return @mkdir($l1, $l2);
 }
 return true;
}

//保存文件(文件, [内容])
function savefile($l1, $l2=''){  
 if(function_exists(file_put_contents)){
  file_put_contents($l1, $l2);
 } else{
  $fp = @fopen($l1, 'wb');
  @fwrite($fp, $l2);
  fclose($fp);
 }
}

//获取文件后缀(文件)
function getfix($l1){
 return end(explode('.', $l1));
}

//是否为允许类型(当前, 允许)
function checkfix($l1, $l2){
 if(!is_array($l2)){
  $l2 = explode(',', str_replace(' ', '', $l2));
 }
 return in_array($l1, $l2) ? 1 : 0;
}

class image{
 //源地址
 var $src;  
 //新图路径(本地化后)
 var $newsrc;
  
 //允许的图类型
 var $allowtype = array('.jpg','.gif','.png','.jpeg');  
 //是否缩略GIF, 为0不处理
 var $regif   = 0;
 //是否保留源文件(1为保留, 0为MD5)
 var $keep = 0;
 //是否可以覆盖已存在的图片,为0则不可覆盖
 var $over = 0;
   
 //图片源目录 
 var $dir; 
 //处理后的目录 
 var $newdir; 


 function __construct($l1=null, $l2=null){
  $this->dir   = $l1 ? $l1 : "./images/temp";
  $this->newdir = $l2 ? $l2 : "./images/s";
 }
 
 function image($l1=null, $l2=null){
  $this->__construct($l1, $l2);
 }
 
 /**
  * 处理后的文件路径
  * 将源图片,MD5文件名后保存到新的目录里
  *
  * @ param  rename()
  * @ return 处理后的文件名
  */
 function reName($src){
  //MD5后文件名(例如:3293okoe.gif)
  $l1 = substr(md5($src),10,10).strrchr($src,"."); 
  //处理后文件名
  $l1  = $this->w.'_'.$this->h.'_'.$l1; 
  //返回处理后的地址
  return $this->newdir.'/'.$l1;
 }
 
  
 /**
  * 生成缩略图
  *
  * @ param  Mini(图片地址, 宽度, 高度, 质量)
  *   如果要保留原来的文件名,请设置 $o->keep = 1;
  * @ return 处理后的图片地址
  */
 function Mini($src,$w,$h, $q=80){ 
  $this->src = $src;
  $this->w = $w;
  $this->h = $h;
  
  //是否处理GIF图
  if(strrchr($src, ".") == ".gif" && $this->regif == 0){
   return $this->src;
  } 
  
  //是否保留原文件名,默认不保留
  if(!$this->keep){
   //改名后的文件地址
   $newsrc = $this->reName($src);
  } else {
   //保持原名
   $src = str_replace('\', '/', $src);
   $newsrc = $this->newdir.strrchr($src, "/");
  }
  
  //如果已存在,直接返回地址 
  if(file_exists($newsrc) && $this->over == 0){
   return $newsrc;
  }
  
  //如果是网络文件,先保存
  if(strstr($src, "http://") && !strstr($src, $_SERVER['HTTP_HOST'])){
   $src = $this->getimg($src);
  } 
  //获取图片属性
  $arr = getimagesize($src);  
  $ow = $arr[0];
  $oh = $arr[1];
  $ot = $arr[2];  
  switch($ot){
   case 1:
    $im = imagecreatefromgif($src);
    break;
   case 2:
    $im = imagecreatefromjpeg($src);
    break;
   case 3:
    $im = imagecreatefrompng($src);
    break;
   default:
    return 0;
  }
  //处理缩略图
  $nim = imagecreatetruecolor($w,$h);
  $k1 = round($h/$w,2);
  $k2 = round($oh/$ow,2);
  if ($k1<$k2){
   $oow = $ow;
   $ooh = round($ow*$k1);
   $sw = 0;
   $sh = ($oh-$ooh)/2;
  }
  else {
   $oow = $oh/$k1;
   $ooh = $oh;
   $sw = ($ow-$oow)/2;
   $sh = 0;
  }
  //生成图片
  if(function_exists(imagecopyresampled)){
   imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);   
  }
  else {
   imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);
  }
  //处理后的目录是否存在
  if(!is_dir($this->newdir)){
   @mkdir($this->newdir);
  } 
  //保存图片    
  switch($ot){
   case 1:
    $rs = imagegif($nim,$newsrc);
    break;
   case 2:
    $rs = imagejpeg($nim,$newsrc,$q);
    break;
   case 3:
    $rs = imagepng($nim,$newsrc);
    break;
   default:
    return 0;
  }
  //返回处理后路径
  return $newsrc;    
 }
   
 /**
  * 保存网络图片
  *
  * @ param  getImg(源图)
  * @ return 保存后的本地址址(本地目录的MD5文件名)
  */
 function getimg($l1){
  $l2 = $this->dir.'/'.substr(md5($l1),10,10).strrchr($l1,".");
  //文件存在,直接返回地址
  if(file_exists($l2)){   
   //echo "exits...";
   return $l2;
  }
  
  //开始获取文件,并返回新路径 
  $img = file_get_contents($l1);     
  if($img){
   if(!is_dir($this->dir)){
    @mkdir($this->dir);
   } 
   savefile($l2, $img);
   //echo "file_get..";
   return $l2;
  }    
 }
 
 /**
  * 转换缩略图www.111cn.net(文件名和结构不变)
  *
  * @ param  mini(源地址, 宽度, 高度, 质量 )
  * @ return 生成的地址
  */
 
 function reImg($src, $w, $h, $q=80){
  $this->keep = 1;
  return $this->Mini($src, $w, $h, $q);
 } 
}
?>

class ExcelParser
{
    private $_data=array(0,'');
    private $_excel_handle;
    private $_excel=array();
    /**
     * 构造函数
     * @param <string> $filename 上传文件临时文件名称
     */
    public function __construct($filename)
    {
        /**
         * 引入excelparser类
         * 普通方法为
         * requires 路径.'excelparser.php';
         */
        import('@.Util.PHPExcelParser.excelparser','','.php');
        $this->_excel_handle=new ExcelFileParser();
        //错误获取
        $this->checkErrors($filename);
    }
    /**
     * 错误校验
     */
    private function checkErrors($filename)
    {
        /**
         * 方法一
         */
        $error_code=$this->_excel_handle->ParseFromFile($filename);
        /**
         * 方法二
         * $file_handle = fopen($this->_filename,'rb');
         * $content = fread($file_handle,filesize($this->_filename));
         * fclose($file_handle);
         * $error_code = $this->_excel->ParseFromString($content);
         * unset($content,$file_handle);
         */
        switch($error_code)
        {
            case 0:
                //无错误不处理
                break;
            case 1:
                $this->_data=array(1,'文件读取错误(Linux注意读写权限)');
                break;
            case 2:
                $this->_data=array(1,'文件太小');
                break;
            case 3:
                $this->_data=array(1,'www.111cn.net读取Excel表头失败');
                break;
            case 4:
                $this->_data=array(1,'文件读取错误');
                break;
            case 5:
                $this->_data=array(1,'文件可能为空');
                break;
            case 6:
                $this->_data=array(1,'文件不完整');
                break;
            case 7:
                $this->_data=array(1,'读取数据错误');
                break;
            case 8:
                $this->_data=array(1,'版本错误');
                break;
        }
        unset($error_code);
    }
    /**
     * Excel信息获取
     */
    private function getExcelInfo()
    {
        if(1==$this->_data[0])return;
        /**
         * 获得sheet数量
         * 获得sheet单元对应的行和列
         */
        $this->_excel['sheet_number']=count($this->_excel_handle->worksheet['name']);
        for($i=0;$i<$this->_excel['sheet_number'];$i++)
        {
            /**
             * 行于列
             * 注意:从0开始计数
             */
            $row=$this->_excel_handle->worksheet['data'][$i]['max_row'];
            $col=$this->_excel_handle->worksheet['data'][$i]['max_col'];
            $this->_excel['row_number'][$i]=($row==NULL)?0:++$row;
            $this->_excel['col_number'][$i]=($col==NULL)?0:++$col;
            unset($row,$col);
        }
    }
    /**
     * 中文处理函数
     * @return <string>
     */
    private function uc2html($str)
    {
        $ret = '';
        for( $i=0; $i<strlen($str)/2; $i++ )
        {
            $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
            $ret .= '&#'.$charcode.';';
        }
        return mb_convert_encoding($ret,'UTF-8','HTML-ENTITIES');
    }
    /**
     * Excel数据获取
     */
    private function getExcelData()
    {
        if(1==$this->_data[0])return;

        //修改标记
        $this->_data[0]=1;
        //获取数据
        for($i=0;$i<$this->_excel['sheet_number'];$i++)
        {
            /**
             * 对行循环
             */
            for($j=0;$j<$this->_excel['row_number'][$i];$j++)
            {
                /**
                 * 对列循环
                 */
                for($k=0;$k<$this->_excel['col_number'][$i];$k++)
                {
                    /**
                     * array(4) {
                     *   ["type"]   => 类型 [0字符类型1整数2浮点数3日期]
                     *   ["font"]   => 字体
                     *   ["data"]   => 数据
                     *   ...
                     * }
                     */
                    $data=$this->_excel_handle->worksheet['data'][$i]['cell'][$j][$k];
                    switch($data['type'])
                    {
                        case 0:
                            //字符类型
                            if($this->_excel_handle->sst['unicode'][$data['data']])
                            {
                                //中文处理
                                $data['data'] = $this->uc2html($this->_excel_handle->sst['data'][$data['data']]);
                            }
                            else
                            {
                                $data['data'] = $this->_excel_handle->sst['data'][$data['data']];
                            }
                            break;
                        case 1:
                            //整数
                            //TODO
                            break;
                        case 2:
                            //浮点数
                            //TODO
                            break;
                        case 3:
                            //日期
                            //TODO
                            break;
                    }
                    $this->_data[1][$i][$j][$k]=$data['data'];
                    unset($data);
                }
            }
        }
    }
    /**
     * 主函数
     * @return <array> array(标识符,内容s)
     */
    public function main()
    {
        //Excel信息获取
        $this->getExcelInfo();
        //Excel数据获取
        $this->getExcelData();
        return $this->_data;
    }
}

?>

[!--infotagslink--]

相关文章

  • cmd下过滤文件名称的两种方法

    这篇文章主要介绍了cmd下过滤文件名称的两种方法,需要的朋友可以参考下...2020-06-30
  • PHP Warning: PHP Startup: 扩展名称: Unable to initialize module

    下面我们来看一篇关于PHP Warning: PHP Startup: 扩展名称: Unable to initialize module问题的解决办法,具体如下。 当安装完PHP 某项扩展后重启apache, php -m...2016-11-25
  • C#文件后缀名的详细介绍

    这篇文章详细介绍了C#文件后缀名,有需要的朋友可以参考一下...2020-06-25
  • php如何获取文件的扩展名

    网上也有很多类似的方法,不过都存在这样那样的不严谨的问题,本文就不一一分析了,这里只给出最正确的利用php 获取文件扩展名(文件后缀名)的方法。 function get_extension($filename){ return pathinfo($filename,PATHIN...2015-10-30
  • 使用GetInvalidFileNameChars生成文件名

    这篇文章主要介绍了一个很实用的函数Path.GetInvalidFileNameChars(),他可以很方便的生成一个有效的文件名称...2020-06-25
  • C#获取图片的后缀名解析

    这篇文章主要介绍了C#获取图片的后缀名解析,需要的朋友可以参考下...2020-06-25
  • C#编程实现获取文件夹中所有文件的文件名

    这篇文章主要介绍了C#编程实现获取文件夹中所有文件的文件名,可实现获取特定目录下制定类型文件名称的功能,涉及C#针对文件与目录的遍历、查询等操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#中文件名或文件路径非法字符判断方法

    这篇文章主要介绍了C#中文件名或文件路径非法字符判断方法,本文主要使用了内置的GetInvalidFileNameChars方法实现非法字符判断,需要的朋友可以参考下...2020-06-25
  • js获取url页面id,也就是最后的数字文件名

    这篇文章主要介绍了js获取url页面id,也就是最后的数字文件名,有时候我们需要判断当前页面的id,又不用重新生成页面直接用js获取最后的数字.htm即可...2020-09-25
  • C#获取并修改文件扩展名的方法

    这篇文章主要介绍了C#获取并修改文件扩展名的方法,实例分析了C#编程方式修改文件扩展名的技巧,涉及Path类的使用方法,需要的朋友可以参考下...2020-06-25
  • php批量删除指定文件夹中指定后缀名文件

    这是一个比较实现的函数我们可以自定义要删除那些目录保存在一个数据中,然后我们根据数据进行遍历并且删除目录下指定文件了,具体代码如下。 直接上代码: 下面的例子...2016-11-25
  • Python通过fnmatch模块实现文件名匹配

    这篇文章主要介绍了Python通过fnmatch模块实现文件名匹配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-01
  • Node.js path模块,获取文件后缀名操作

    这篇文章主要介绍了Node.js path模块,获取文件后缀名操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-07
  • php utf8编码上传中文文件名出现乱码

    下面我来总结一下php utf8编码上传中文文件名出现乱码解决办法,有碰这类问题的朋友可参考参考。 代码如下 复制代码 <?php if(isset($_FIL...2016-11-25
  • PHP获取当前执行php文件名的代码

    这篇文章主要介绍了PHP获取当前执行php文件名的代码,需要的朋友可以参考下...2017-03-12
  • 详解C# 不能用于文件名的字符

    在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符,那么具体是包括哪些符号不能作为文件名呢?下面小编给大家介绍下...2020-06-25
  • php上传文件中文文件名乱码

    可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱...2016-11-25
  • php中获取文件后缀名多种方法

    以前我都讲过了很多关于获取文件后缀名的方法,今天我们再次总结一下关于利用不同种函数来取得,有需要的朋友可以参考一下 一,php explode函数,函数用法参考 http://...2016-11-25
  • PHP中FCK上传图片文件名乱码

    使用fck的朋友可能会碰这样一个情况就是如果上你的文件名为英文字母是没有任何问题,如果上传的是中文汉字就会出现中文名乱码了,下面我来给大家分析与介绍解决方法。...2016-11-25
  • php fopen函数创建中文文件名出错

    fopen函数是用来创建或访问文件的但如果是中文处理就不是那么了经常会碰到中文出错问题了,对于这个问题我们来看看处理办法。 PHP使用fopen()、filesize()等PHP...2016-11-25