2015-06-26 01:09:35 cfs56 阅读数 133
  • PHP扩展模块开发之DLL编写与调用

    在很多PHP项目中或多或少都会遇到需要调用到DLL,比如某些第三方提供的接口只有DLL。DLL是Windows操作系统下的动态链接库,只能运行在Windows平台中,在PHP系统下并没有直接调用DLL文件的方法,本课程提供了关于PHP调用DLL的解决方法。

    160 人正在学习 去看看 李强强
//注:本php文件系统纯属个人编写,官方网站http://haook.cn QQ594923603
//docusystem.php  页面如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <style>
        .info{width:900px;height:800px;margin:35px auto;}
        .infoul{list-style-type:none;width:860px;padding:0;margin:0px;text-indent: 10px;}
        .infoul li{border-bottom:1px solid green;line-height:35px;width:900px;overflow: hidden;}
        .infodiv1{float:left;width:500px;height:35px;}
        .infodiv2{float:left;width:150px;}
        .infodiv3{float:left;width:150px;}
        .infodiv4{float:left;width:500px;text-indent: 10px;}
        .infodiv5,.infodiv6{float:left;width:150px;text-indent: 10px;}
        .info2{width:900px;background-color:#ececec;line-height:40px;font-size:18px;border-top:2px solid orange;overflow: hidden;}
        .openfile{position:absolute;left:250px;top:50px;border-radius:6px;padding:8px 12px;background-color:blue;color:white;cursor: pointer;}
        .newfile{position:absolute;left:400px;top:50px;border-radius:5px;padding:8px 12px;background-color:blue;color:white;cursor: pointer;}
        .shang{position:absolute;left:407px;top:112px;border-radius:5px;padding:3px 5px;background-color:#999999;color:white;cursor: pointer;}
        .anone{display:none;}
        .backs{height:70px;background-color:#ececec;}
        .shang:hover{background-color:#9ccccc;}
        a{color:blue;cursor:pointer;}
        a:hover{padding:2px 4px;border:1px dashed red;}  
        .dvsty:hover{background-color:orange;cursor:pointer;}
        .dvsty{text-indent: 20px;background:url(jia.jpg) no-repeat left;}
       
    </style>
    <script src="jquery-1.10.2.min.js"></script>   //引入JQ插件
</head>
<body>
   <?php
   if(isset($_GET['index1'])){
        $ff2=$_GET['index1'].'/';
        $ff=iconv('utf-8','gbk',$ff2);
    }else{
     $ff="test/";$ff2="test/"; //首次加载时,设置的根目录
    }
   ?>
     <button class="shang" onclick="javascript:history.back();">上一级目录</button>
    <div id="infoid" class="info">
    <div class="backs">
    <div class="openfile" id="newfiles" onclick="document.getElementById('aa').click();">添加文件
    <form action="docusystem.php?index1=<?php echo $ff2;?>" method="post" enctype="multipart/form-data">
        <input id="aa" type="file" class="anone" name="uploadFile1"/><input id="dijiao" type="submit" class="anone" />
    </form>
    </div>
    <div class="newfile" id="newjia">新建文件夹</div>
    </div>
    <div class="info2">
    <div class="infodiv4">文件名</div>
    <div class="infodiv5">大小</div>
    <div class="infodiv6">创建日期</div>
    </div>
            
    <?php
     //ini_set('date.timezone','Asia/Shanghai'); //获取时间显示方式
     date_default_timezone_set("PRC");  //东八区
      //header('Content-Type:text/html;charset=utf-8');
    
    //表单文件存放
    if(isset($_FILES["uploadFile1"])){
        if($_FILES["uploadFile1"]["error"]>0){
            echo "信息有误,请检查!---" .$_FILES["uploadFile1"]["error"]."<br />";
        }else{
            $name=iconv("UTF-8","gbk",$_FILES["uploadFile1"]["name"]);
            move_uploaded_file($_FILES["uploadFile1"]["tmp_name"],$ff.$name);
        }
    }
    //读取到数据就显示、加载在页面上
    if(is_dir($ff)){
        $wenjianjia=array();
        $wenjian=array();
        $shu1=scandir($ff);
        foreach($shu1 as $shu2){
            if($shu2!='.' && $shu2!='..'){
                if(is_dir($ff.$shu2)){ //如果为目录
                    $wenjianjia[]= array(
                                    "name"=>iconv('gbk','utf-8',$shu2),
                                    "ss1"=>sprintf('%0.2f',filesize($ff.$shu2)/1024), //文件大小,
                                    "filectime1"=>date("Y-m-d",filectime($ff.$shu2)),
                                    );
                }else{ //为文件
                    $wenjian[]=array(
                                    "name"=>iconv('gbk','utf-8',$shu2),
                                    "ss1"=>sprintf('%0.2f',filesize($ff.$shu2)/1024), //文件大小,
                                    "filectime2"=>date("Y-m-d",filectime($ff.$shu2)),
                                    );
                }
            }
        }
    ?>
        <ul class="infoul">
        <?php
        foreach($wenjianjia as $wenjianjia2){
        ?>    
            <li  name="jianame" class="<?php echo $wenjianjia2["name"];?>" id="jias">  
                <?php
                 echo '<div name="jianamediv" class="infodiv1 dvsty" >'.$wenjianjia2['name'].'</div>'.'<div class="infodiv2">'.$wenjianjia2['ss1'].'Kb'.'</div>'.
                        '<div class="infodiv3">'.$wenjianjia2['filectime1'].'</div>';
                ?>
                <a class="<?php echo $ff2.$wenjianjia2["name"];?>" >删除</a>
            </li>    
        <?php
        }
            foreach($wenjian as $wenjian2){    
        ?>
            <li>
                <?php
                    echo '<div class="infodiv1">'.$wenjian2['name'].'</div>'.'<div class="infodiv2">'.$wenjian2['ss1'].'Kb'.'</div>'.
                    '<div class="infodiv3">'.$wenjian2['filectime2'].'</div>';
                ?>
                <a class="<?php echo $ff2.$wenjian2['name'];?>" >删除</a>
            </li>
            <?php
            }
            ?>
        </ul>
<?php    
    }
?>

</div>
</body>
<script>

        //---删除按钮
        $("ul li a").click(function(){
            var rrr= this.className;
            //$.post("ajax.php",{namet:$("#uname").val()},//获取类名为"name"文本的值,以NAME异步传值
            $.post("ajax.php",{namet:rrr},
             function(data){//data为反回值,function进行反回值处理
              alert(data);
               location.href="docusystem.php?index1=<?php echo $ff2;?>";
              });
             // alert(rrr);
        });    
        
        //添加文件            
        $("input[type='file']").change( function() {    
            document.getElementById('dijiao').click();    
        });
        
        //新建文件夹
         $("#newjia").click(function(){
            function yy(){
                var name = prompt("请输入文件夹名称!","");
                if(name==""){
                    yy();
                }else if(name==null){
                    alert("文件夹名不能为空哟-_-");
                    //yy(); 注释掉,不然就很流氓哦
                }
                else{
                    var jiadery="<?php echo $ff2;?>"+name;  
                    $.post("ajax.php",{newjias:jiadery},
                     function(data){
                        if(data!=""){
                            
                        }else{
                            alert(data);
                        }
                       location.href="docusystem.php?index1=<?php echo $ff2;?>";
                      });
                }
            }yy();            
        });    
        
        //点击文件夹触发
          $(".dvsty").click(function(){
            var jiadery="<?php echo $ff2;?>"+$(this).parent("li").attr("class"); //点击div获取父亲的class名
            location.href="docusystem.php?index1="+jiadery;    
            //alert(jiadery);            
        });    
            
</script>
</html>

//ajax.php  页面如下:
 <?php  
    
    if(isset($_POST['namet'])){
        $name1=$_POST['namet'];
        $dele=iconv('utf-8','gbk',$name1);
        if(is_dir($dele)){ //如果为目录,删除文件夹
        //echo $dele;
            function dirdele($dele){
                $arr=scandir($dele);
                foreach($arr as $filerr){
                    if($filerr != '.' && $filerr != '..'){
                        $hou=$dele.'/'.$filerr;
                        if(!is_dir($hou)){
                            unlink($hou);
                        }else{
                            dirdele($hou);
                        }      
                    }  
                }
                rmdir($dele); //空目录删除
            }
            dirdele($dele);    
            echo '删除成功';    
        }else{ //如果为文件,删除文件
        //echo $dele;    
            if(@unlink($dele)){         
            echo '成功删除文件!>';
            }else{
                echo '文件出错,请检查是否有权限删除!';
            }    
        }
        
    }    
 
    //新建文件夹
    if(isset($_POST['newjias'])){
        $mkjia=$_POST['newjias'];
        $mkjia2=iconv('utf-8','gbk',$mkjia);
        if(mkdir( $mkjia2, 0755)){
            //添加成功不提示
        }else{
            echo '新建文件夹 失败!';
        }
            
    }
?>


//注:本php文件系统纯属个人编写,官方网站http://haook.cn QQ594923603





2018-07-12 20:32:06 qq_35786291 阅读数 97
  • PHP扩展模块开发之DLL编写与调用

    在很多PHP项目中或多或少都会遇到需要调用到DLL,比如某些第三方提供的接口只有DLL。DLL是Windows操作系统下的动态链接库,只能运行在Windows平台中,在PHP系统下并没有直接调用DLL文件的方法,本课程提供了关于PHP调用DLL的解决方法。

    160 人正在学习 去看看 李强强
<?php
header("content-type:text/html;charset=utf-8");
    //文件路劲有关的四个函数  

  //文件目录的绝对路径

$path = "./30.php";
echo   __DIR__;//E:\WAMP\apache2\htdocs\php
//1文件名
echo basename($path)."<br>";//30.php 加可选参数.php 时输出 名字  没后缀
echo basename($path,".php");//30
//2路径目录
echo dirname($path); // .
//3有关路径的综合
$info =  pathinfo($path);
var_dump($info);
//4 返回绝对路径
echo realpath($path);//E:\WAMP\apache2\htdocs\php\30.php
//计算文件目录 磁盘等属性
//1 文件大小
echo filesize($path);//187  单位字节
//2 磁盘可用空间 
echo disk_free_space("E:"); //61652082688 字节
//3 磁盘总空间
echo disk_total_space("E:");
//4 获取目录大小
function  getDirSize($dirname){
    $totalfilesize = 0;
  $dirh = opendir($dirname);//抑制文件错误输出  即使打开失败也不会返回错误
    if ($dirh) {
        while ( ($dirElement = readdir($dirh)) ) {
            $brandir = $dirname."/".$dirElement;
            if(is_file($brandir)){
                $totalfilesize += filesize($brandir);
            }
            if( is_dir($brandir )){
              //  $totalfilesize += getDirSize($brandir);
            }
        } 
    }
    @closedir($dirh);
      return $totalfilesize;
}
// echo    "--------"."<br>".getDirSize("E:\C++\ConsoleApplication16\ipch");
   
//文件修改时间 以及访问时间  //返回的为时间戳
 //1  文件最后的访问时间
 echo fileatime($path);  
 //2 文件的 最后改变时间  包括权限等
 echo filectime($path);
 //3 文件 文本的修改时间
 echo filemtime($path);
 $path= "./05_p.txt";
 //文件操作
 //1 文件读取
 echo "<br>".$path;
 
function getFileContent (){
    global $path;//取外部的$path
    $handle = @fopen($path,'r');//无法打开php文件  只能打开特定文件  r r+ w(写前会删除内容) w+(写前删除) a(追加模式 只能写 a+(读写 追加)
    while( !feof($handle) ){//feof  为 EOF代表文文件末尾
      //  echo  fgets($handle); //每次取一行   
        //echo fgetc($handle);//每次去1 个字符
        echo fread($handle,'1024');//每次取1024个字节
    }
        fclose($handle); 
 }
getFileContent();
//2远程的打开
$handle = fopen("http://www.phtstudy.xin", "r");
echo  fgets($handle,"1024");
//3以数组的方式放回数据
$arr = file($path);//每次输出一行
var_dump($arr);
//4fgetcsv  得到csv数据  既可以输 excel access mysql 文件等
function getexcel(){
    $handle = fopen("./01.csv", "r");
    $arr  = fgetcsv($handle);
    $arr= array_slice($arr, 0, 2);
    var_dump($arr);
 call_user_func_array(function ( $arr1,$arr2 ) {
    echo  iconv("GBK","UTF-8",$arr1).$arr2; // 设计乱码问题
    },$arr);
}
getexcel();
//5解析 文本fscanf
function scanfFile()
{
    $handle = fopen("./file1.txt", "r");
    while(($scan = fscanf($handle, "%d-%d-%d") )){
        var_dump($scan);
    }
    fclose($handle);
}

scanfFile();
//6 取出所有文件
$allfile = readfile($path);//取出所有内容
//文件目录的操作
$dir  = opendir('e:');
while( ($file = readdir($dir)) ){
    echo iconv("GBK","UTF-8",$file)."<br>";
    
}
closedir($dir);

//删除文件  unlink() 删除目录rmdir()  重命名文件rename() 


//passthru($command) 用于系统而进制返回数据  例如图片等
//php  常用的两个调用操作系统的两个函数

$exec = exec("dir",$result); //第一个参数也可以传递脚本文件
var_dump($exec); //返回文件大小要想返回文件结果  要加个参数
var_dump($result);//执行结果
$res =  system(" dir",$result);  //直接返回结果
 //$res = mb_convert_encoding($res, "UTF8");
 $res =iconv("gbk","utf-8", $res );
echo $res;

2014-08-07 16:28:15 u012581409 阅读数 341
  • PHP扩展模块开发之DLL编写与调用

    在很多PHP项目中或多或少都会遇到需要调用到DLL,比如某些第三方提供的接口只有DLL。DLL是Windows操作系统下的动态链接库,只能运行在Windows平台中,在PHP系统下并没有直接调用DLL文件的方法,本课程提供了关于PHP调用DLL的解决方法。

    160 人正在学习 去看看 李强强
/*

* 1、获取路径的文件名

* string basename(string path[,string suffix])
  path 	必需。规定要检查的路径。
  suffix 可选。规定文件扩展名。如果文件有 suffix,则不会输出这个扩展名。
  eg:
     <?php
        $path = "/testweb/home.php";

        //显示带有文件扩展名的文件名
        echo basename($path);

       //显示不带有文件扩展名的文件名
       echo basename($path,".php");
     ?> 
     输出:
       home.php
       home

* 2、获取路径的目录

* string dirname(string path)
  path 	必需。规定要检查的路径。
  eg: 
     <?php
         echo dirname("c:/testweb/home.php");
         echo dirname("/testweb/home.php");
     ?>
     输出:
        c:/testweb
        /testweb

* 3、了解更多的路径信息

* array pathinfo(string path,string options)
    path 必需。规定要检查的路径。
    options 可选。规定要返回的数组元素。默认是 all。
    可能的值:
       PATHINFO_DIRNAME - 只返回 dirname
       PATHINFO_BASENAME - 只返回 basename
       PATHINFO_EXTENSION - 只返回 extension

    说明
       pathinfo() 返回一个关联数组包含有 path 的信息。
       包括以下的数组元素:
      [dirname]
      [basename]
      [extension]
    eg:
       <?php
           print_r(pathinfo("/testweb/test.txt"));
       ?>

     输出:
	Array
	(
	[dirname] => /testweb
	[basename] => test.txt
	[extension] => txt
	)

* 4、确定绝对路径

* string realpath(string path)
  eg:
     <?php
	echo realpath("test.txt");
     ?>

     输出:
	C:\Inetpub\testweb\test.txt

* 5、确定文件的大小

* int filesize(string filename)
  eg:
     <?php
       echo filesize("test.txt");
     ?>
     输出:
       20

* 6、计算磁盘的可用空间

* float disk_free_space(string directory)
    该函数将根据相应的文件系统或磁盘分区返回可用的字节数
* 7、计算磁盘的总容量

* float disk_total_space(string directory)
   该函数将根据相应的文件系统或磁盘分区返回所有的字节数
   eg:
      <?php
        echo disk_total_space("C:");
      ?> 
   输出类似这样:
      509693888668

* 8、确定文件的最后访问时间

* int fileatime(string filename)

* 9、确定文件的最后改变时间

* int filectime(string filename)

* 10、确定文件的最后修改时间

* int filemtime(string filename)

* 11、识别文件末尾字符

* int feof(string resource)

* 12、打开和关闭文件

* resource fopen(string resource,string mode[,int use_include_path[,resource zountext]])

* boolean fclose(resource filehandle)

* 13、将文件读入数组

* array file9string filename[,int user_inlucde_path[,resource context]])

* 14、将文件内容读入字符串变量

* string file_get_contents(string filename[,int use_inlude_path[resource context]])

* 15、将CSV文件读入数组

* array fgetcsv(resource handle[,int length[,string delimiter[,string enclosure]]])

* 16、读取指定数目的字符

* string fgets(resource handle[,int length])

* 17、从输入中剔除标记,清除所有HTML和PHP标记

* string fgetss(resourcce handle,int length[,string allowable_tags])

* 18、以一次读取一个字符的方式读取文件

* string fgetc(resource handle)

* 19、忽略换行符

* string fread(resource handle,int length)

* 20、读取整个文件

* int readfile(string filename[,int use_include_path])

* 21、根据预定义的格式读取文件

* mixed fscanf(resource handle,string format[,string var1])

* 22、将字符串写入文件

* int fwrite(resource handle,string string[,int length])

* 23、移动文件指针

* int fseek(resource handle,int offset[,int whence])

*

* 1、打开目录句柄

* resource opendir(string path)

* 2、关闭目录句柄

* void closedir(resource directory_handle)

* 3、解析目录内容

* string readdir(resource directory_handle)

* 4、将目录读入数组

* array scandir(string directory[,int sorting_order[,resource context]])

*

*

* 1、删除目录

* int rmdir(string dirname)

* 2、重命名文件

* boolean rename(string olename,string newname)

* 3、触摸文件

* int touch(sting filename[,int time[,int atime]])

*/

2017-09-07 07:59:13 Mind_programmonkey 阅读数 295
  • PHP扩展模块开发之DLL编写与调用

    在很多PHP项目中或多或少都会遇到需要调用到DLL,比如某些第三方提供的接口只有DLL。DLL是Windows操作系统下的动态链接库,只能运行在Windows平台中,在PHP系统下并没有直接调用DLL文件的方法,本课程提供了关于PHP调用DLL的解决方法。

    160 人正在学习 去看看 李强强

PHP文件系统

1.PHP文件系统之读取文件内容

PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中。

$content = file_get_contents('./test.txt');

file_get_contents也可以通过参数控制读取内容的开始点以及长度

$content = file_get_contents('./test.txt', null, null, 100, 500);

PHP也提供类似于C语言操作文件的方法,使用fopen,fgets,fread等方法,fgets可以从文件指针中读取一行,freads可以读取指定长度的字符串。

$fp = fopen('./text.txt', 'rb');

while(!feof($fp)) {

    echo fgets($fp); //读取一行

}

fclose($fp);

 

$fp = fopen('./text.txt', 'rb');

$contents = '';

while(!feof($fp)) {

    $contents .= fread($fp, 4096); //一次读取4096个字符

}

fclose($fp);

使用fopen打开的文件,最好使用close关闭文件指针,以避免文件句柄被占用。

 

2.PHP文件系统之判断文件是否存在

一般情况下对文件进行操作的时候需要先判断文件是否存在,PHP中常用来判断文件存在的函数有两个is_file与file_exists.

$filename = './test.txt';

if (file_exists($filename)) {

    echo file_get_contents($filename);

}

如果只是判断文件是否存在,使用file_exists就行,file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在,从函数名可以看出,is_file是确切的判断给定的路径是否是一个文件。

$filename = './test.txt';

if (is_file($filename)) {

    echo file_get_contents($filename);

}

更加精确的可以使用is_readable与is_writeable在文件是否存在的基础上,判断文件是否可读与可写。

$filename = './test.txt';

if (is_writeable($filename)) {

    file_put_contents($filename, 'test');

}

if (is_readable($filename)) {

    echo file_get_contents($filename);

}

 

3.PHP文件系统之取得文件的修改时间

文件有喝多元属性,包括:文件的所有者、创建时间、修改时间、最后的访问时间等。

fileowner:获得文件的所有者

filectime:获取文件的创建时间

filemtime:获取文件的修改时间

fileatime:获取文件的访问时间

其中最常用的文件的修改时间,通过文件的修改时间,可以判断文件的时效性,经常用在静态文件或者缓存数据的更新。

$mtime = filemtime($filename);

echo '修改时间:'.date('Y-m-d H:i:s', filemtime($filename));

 

4.PHP文件系统之取得文件的大小

通过filesize函数可以取得文件的大小,文件大小是以字节数表示的。

$filename = '/data/webroot/usercode/resource/test.txt';

$size = filesize($filename);

如果要转换文件大小的单位,可以自己定义函数来实现

function getsize($size, $format = 'kb') {

    $p = 0;

    if ($format == 'kb') {

        $p = 1;

    } elseif ($format == 'mb') {

        $p = 2;

    } elseif ($format == 'gb') {

        $p = 3;

    }

    $size /= pow(1024, $p);

    return number_format($size, 3);

}

$filename = '/data/webroot/usercode/code/resource/test.txt';$size = filesize($filename);

$size = getsize($size, 'kb'); //进行单位转换echo $size.'kb';

值得注意的是,没法通过简单的函数来取得目录的大小,目录的大小是该目录下所有子目录以及文件大小的总和,因此需要通过递归的方法来循环计算目录的大小。

5.PHP文件系统之写入内容到文件

与读取文件对应,PHP写文件也具有两种方式,最简单的方式是采用file_put_contents.

$filename = './test.txt';

$data = 'test';

file_put_contents($filename, $data);

上例中,$data参数可以是一个一维数组,当$data时数组的时候,会自动的将数组连接起来,相当于$data=implode('', $data);

同样的,PHP也支持类似C语言风格的操作方式,采用fwrite进行文件写入。

$fp = fopen('./test.txt', 'w');

fwrite($fp, 'hello');

fwrite($fp, 'world');

fclose($fp);

 

6.PHP文件系统之删除文件

Unix系统命令类似,PHP使用unlink函数进行文件删除。

unlink($filename);

删除文件夹使用rmdir函数,文件夹必须为空,如果不为空或者没有权限则会提示失败。

rmdir($dir);

如果文件夹中存在文件,可以先循环删除目录中的所有文件,然后再删除该目录,循环删除可以使用glob函数遍历所有文件。

foreach (glob("*") as $filename) {

   unlink($filename);

}

2016-09-27 22:49:00 weixin_33724059 阅读数 10
  • PHP扩展模块开发之DLL编写与调用

    在很多PHP项目中或多或少都会遇到需要调用到DLL,比如某些第三方提供的接口只有DLL。DLL是Windows操作系统下的动态链接库,只能运行在Windows平台中,在PHP系统下并没有直接调用DLL文件的方法,本课程提供了关于PHP调用DLL的解决方法。

    160 人正在学习 去看看 李强强

一、文件操作系统概述

  1.概述:

    php中的文件操作系统主要是对文件和目录的操作。文件在windows系统下分为3种不同:文件、目录、未知,在linux/unix系统下分为7种不同:block、char、dir、fifo、file、link和unknown七种类型。目录在windows系统:D:/a/b/c.php 或 D:\a\b\c.php,在linux/unix系统: /a/b/c.php,为统一建议使用"/"作为目录之间的分割符。

  2.目录或文件属性获取函数

  *(1)取得文件类型string filetype ( string $filename );可能的值有 fifo,char,dir,block,link,file 和 unknown

<?php  
    echo filetype('test.php');//返回file
    echo filetype('D:/wamp/www/face');//返回dir
    echo filetype('face1');//不存的文件或目录抛出警告
    echo filetype('face');//返回dir
?>

  *(2)判断给定文件名是否是一个目录:bool is_dir(string $filename); 如果文件名存在,并且是个目录,返回 TRUE ,否则返回 FALSE

<?php
    var_dump(is_dir('test.php'));//boolean false
    var_dump(is_dir('face'));//boolean true
    var_dump(is_dir('c:'));//boolean true
?>    

   (3)判断给定文件名是否可执行: bool is_executable(string $filename);如果文件存在且可执行则返回 TRUE ,错误时返回 FALSE 。这个函数在window下没有测试出来,老是false

   *(4)判断给定文件名是否为一个正常的文件: bool is_file(string $filename);如果文件存在且为正常的文件则返回 TRUE ,否则返回 FALSE

<?php 
    var_dump(is_file('test.php'));//boolean true
?>

 

  (5)判断给定文件名是否为一个符号连接: bool is_link(string $filename);如果文件存在并且是一个符号连接则返回 TRUE ,否则返回 FALSE-----未测试

  (6)判断给定文件名是否可读: bool is_readable(string $filename);如果由 filename 指定的文件或目录存在并且可读则返回 TRUE ,否则返回 FALSE

<?php 
    var_dump(is_readable('D:/wamp/www/test.php'));//boolean true
?>

 

  *(7)判断给定文件名是否可读: bool is_writable(string $filename);如果由 filename 指定的文件或目录存在并且可读则返回 TRUE ,否则返回 FALSE

<?php 
    var_dump(is_writable('D:/wamp/www/test.php'));//boolean true
?>

 

  *(8)检查文件或目录是否存在: bool file_exists(string $filename);如果由 filename 指定的文件或目录存在则返回 TRUE ,否则返回 FALSE   

<?php 
    var_dump(file_exists('test.php'));//boolean true
    var_dump(file_exists('face'));//boolean true
?>

 

  *(9)取得文件大小: int filesize(string $filename);返回文件大小的字节数,如果出错返回 FALSE 并生成一条 E_WARNING 级的错误。

<?php 
    var_dump(filesize('test.php'));//int 44---字节数
    var_dump(filesize('face'));//int 12288
    //可以是文件或文件夹
?>

 

  *(10)取得文件的 inode 修改时间:int filectime(string $filename);返回文件上次 inode 被修改的时间, 或者在失败时返回 FALSE 。 时间以 Unix 时间戳的方式返回

<?php
    //获取的是文件的创建时间,文件和文件夹都行
    date_default_timezone_set('Asia/Shanghai'); 
    $time=filectime('face');
    echo date('Y-m-d H:i:s',$time);
?>

   *(11)取得文件修改时间:int filemtime(string $filename);返回文件上次被修改的时间, 或者在失败时返回 FALSE 。时间以 Unix 时间戳的方式返回

   *(12)取得文件访问时间:int fileatime(string $filename);返回文件上次被访问的时间, 或者在失败时返回 FALSE 。时间以 Unix 时间戳的方式返回

<?php
    header('content-type:text/html;charset=utf-8;');
    //获取的是文件的创建 修改时间,文件和文件夹都行
    date_default_timezone_set('Asia/Shanghai'); 
    $time1=filectime('face');
    $time2=filemtime('face');
    $time3=fileatime('face');
    echo '文件创建的时间:',date('Y-m-d H:i:s',$time1);
    echo "<br/>";
    echo '文件最后修改的时间:',date('Y-m-d H:i:s',$time2);
    echo "<br/>";
    echo '文件最后访问的时间:',date('Y-m-d H:i:s',$time2);
    //这个时候文件夹的访问和修改时间一样

    echo '<br/>','-----------------------------------------------------------------','<br/>';
    $time1=filectime('a.txt');
    $time2=filemtime('a.txt');
    $time3=fileatime('a.txt');
    echo '文件创建的时间:',date('Y-m-d H:i:s',$time1);
    echo "<br/>";
    echo '文件最后修改的时间:',date('Y-m-d H:i:s',$time2);
    echo "<br/>";
    echo '文件最后访问的时间:',date('Y-m-d H:i:s',$time2);
?>

 

结果:

注意:

  关于访问 修改 新建这个三个时间的解释

  一般来说,比较有参考价值的是修改时间,表示文件内容被修改过,会记录一个时间。通过复制/粘贴、重命名操作都不会更改修改时间。复制/粘贴操作只修改创建时间/访问时间重命名不会改变任何时间。(xp系统下测试结果)

     按照道理讲,访问时间应该是最后一次读文件的时间。但对一个文件只是读操作的话,为了更新这个时间,就必须做一个写操作,把该信息写入到文件属性和目录索引中去,这样一个读操作就变成了一个读+写操作。由于现在的硬盘都非常大,几十万个文件都是常事,如果读操作再加一个写操作,那么这个确实影响性能。(详细可以参考Fsutil: behavior 中对于DisableLastAccess的描述,地址附后)。

     从 XP2003 SP1起,为了性能,默认把LastAccessTime(最后访问时间)给禁用了。只有在修改文件时,才会更新访问时间。

  下图是各个文件系统对时间的支持情况。

  

  (13)给出文件的信息: array stat(string $filename);获取由 filename 指定的文件的统计信息。如果 filename 是符号连接,则统计信息是关于被连接文件本身的,而不是符号连接。lstat()stat() 相同,只除了它会返回符号连接的状态。

  

 记忆:参数都是string $filename;不是文件就是目录;

   目录文件和存在,可读可写可执行,创建修改和访问,文件大小和类型!

重点区分:

    PHP的 file_exists = is_dir + is_file
    它既可以判断文件是否存在,又可以判断目录是否存在。但这样一个全面的函数执行效率非常低,就像asp中request不指定是form,还是get,cookies,所以结论是:


    ◦如果要判断目录是否存在,请用独立函数 is_dir(directory)
    ◦如果要判断文件是否存在,请用独立函数 is_file(filepath)
    is_file 只判断文件是否存在;
    file_exists 判断文件是否存在或者是目录是否存在;
    is_dir 判断目录是否存在;


    查看手册,虽然这两个函数的结果都会被缓存,但是is_file却快了N倍。
    还有一个值得注意的:
    文件存在的情况下,is_file比file_exists要快N倍;
    文件不存在的情况下,is_file比file_exists要慢;
    结论是,file_exits函数并不会因为该文件是否真的存在而影响速度,但是is_file影响就大了

二、目录的相关操作

  1.路径相关函数

    *(1)返回路径中的文件名部分: string basename("url地址"[,去除部分])

<?php
    $path="D:wamp/www/test.php";
    echo basename($path);//test.php
    echo "<br/>";
    echo basename($path,'php');//test.
?> 

    *(2)返回路径中的目录部分:string dirname(string $path);

<?php
    $path="D:wamp/www/test.php";
    echo dirname($path);//D:wamp/www
?>

     *(3)返回文件路径的信息: array pathinfo(string $path);

<?php
    $path="D:wamp/www/test.php";
    var_dump(pathinfo($path));
?>

 

    结果

      

     (4)获取指定文件的绝对路径: string realpath(string $path);

<?php
    $path="test.php";
    echo realpath($path);//D:wamp/www/test.php
?>

 

  2.目录的遍历函数

    *(1)打开一个目录,返回此目录的资源句柄: resource opendir(string $path);

<?php
    $path="D:/wamp/www/";//必须是一个合法且存在的目录
    echo opendir($path);//Resource id #3
?>

 

    *(2)从目中读取一个目录或文件,并指针向下移动一位: string readdir(resource $dir_handle);

<?php
    header('content-type:text/html;charset=utf-8;');
    $path="D:/wamp/www";
    if(!is_dir($path)){
        echo "不是一个合法的文件路径!";
        exit;
    }
    if($dir_handle=opendir($path)){
        echo "打开资源成功!"."<br/>";
        while(false!==($file=readdir($dir_handle))){//必须严格按照这种方式来遍历
            echo $file,'<br/>';
        }
    }else{
        echo "打开资源失败!";
    }
  closedir($dir_path);//关闭资源
?>

   结果:

    

 

    *(3)关闭目录句柄:void closedir(resource $dir_handle);

    (4) 倒回目录指针(移至首位)----rewinddir(资源句柄);

  3.统计空间的大小

    (1)返回目录中的可用空间:float disk_free_space ( string $directory ),以浮点返回可用的字节数, 或者在失败时返回 FALSE

    (2)返回一个目录的磁盘总大小:float disk_total_space ( string $directory ),以浮点返回一个目录的磁盘总大小字节数, 或者在失败时返回 FALSE

<?php
    echo disk_free_space('D:');//122210635776
    echo "<br/>";
    echo disk_free_space('./');//122210635776
    echo "<br/>";
    echo disk_total_space('./');//141394038784
?>

 

  4.目录的操作

    *(1)尝试新建一个由 pathname 指定的目录:bool mkdir(string $path);成功时返回 TRUE , 或者在失败时返回 FALSE

    *(2)尝试删除 dirname 所指定的目录(该目录必须是空的,而且要有相应的权限): bool rmdir(string $path);成功时返回 TRUE , 或者在失败时返回 FALSE

<?php  
    header('content-type:text/html;charset=utf-8;');
    if(mkdir('D:/wamp/www/www1/www1')){
        echo "创建成功!";
    }else{
        echo "创建失败!";
    };
    if(rmdir('D:/wamp/www/www1/www1')){//该文件必须为空
        echo "删除成功!";
    }else{
        echo "删除失败!";
    }
?>

 

     *(3)删除文件bool unlink ( string $filename);成功时返回 TRUE , 或者在失败时返回 FALSE  

<?php  
    header('content-type:text/html;charset=utf-8;');
    if(unlink('D:/wamp/www/a.txt')){
        echo "删除成功!";
    }else{
        echo "删除失败!";
    }
?>

 

    (4)拷贝文件: bool copy ( string $source , string $dest );

<?php  
    header('content-type:text/html;charset=utf-8;');

    // 第一个参数是复制的源,第二个参数是复制到的路径和名称,不能单纯的是个路径
    if(copy('D:/wamp/www/aa.jpg', 'D:/wamp/www/w/aa1.jpg')){
        echo "复制成功!";
    }else{
        echo "复制失败!";
    }
?>

 

 三、文件基本操作

   1.打开文件:resource fopen ( string $filename , string $mode )

 

  2.读取文件内容:string fread ( resource $handle , int $length )返回所读取的字符串, 或者在失败时返回 FALSE

<?php  
    $path='D:/wamp/www/a.txt';
    if($handle=fopen($path,'rb')){
        $content=fread($handle, filesize($path));
        echo $content;
    }else{
        echo "打开资源失败!";
    }
?>

 

  3.写入文件:int fwrite ( resource $handle , string $string [, int $length ] );fwrite() 返回写入的字符数,出现错误时则返回 FALSE

   这个地方可以验证不同的打开模式

  4.关闭一个已打开的文件资源:bool fclose ( resource $handle )

  5.从文件指针中读取一行:string fgets ( resource $handle [, int $length ] )

  6.从文件指针中读取字符string fgetc ( resource $handle )

  读取文件注意事项:读取之后“光标”就会停留,注意理解这一点。最后两种结果的不同

示例:读取文件内容

<?php  
    $path='D:/wamp/www/a.txt';
    $handle=fopen($path,'r');
    echo fgets($handle);
?>

 

结果1:

<?php  
    $path='D:/wamp/www/a.txt';
    $handle=fopen($path,'r');
    echo fread($handle, filesize($path));
?>

 

结果2:

<?php  
    $path='D:/wamp/www/a.txt';
    $handle=fopen($path,'r');
    echo fgets($handle);
    echo "<br/>","--------","<br/>";
    echo fread($handle, filesize($path));
?>

 

结果3:

<?php  
    $path='D:/wamp/www/a.txt';
    $handle=fopen($path,'r');
    echo fread($handle, filesize($path));
    echo "<br/>","--------","<br/>";
    echo fgets($handle);
?>

 

结果4:

  不用打开文件直接操作文件的函数

  7.将文件读出(内容是数组格式),并返回.把整个文件读入一个数组中:array file ( string $filename)

<?php  
    $path='D:/wamp/www/a.txt';
    $arr=file($path);
    print_r($arr);
?>

 

 

  8.将文件内容读出,并输出,读入一个文件并写入到输出缓冲:int readfile ( string $filename );返回字节数

<?php  
    $path='D:/wamp/www/a.txt';
    readfile($path);
?>

 

  

  9.10

    string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )The function returns the read data 或者在失败时返回 FALSE
    int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )该函数将返回写入到文件内数据的字节数,失败时返回 FALSE
<?php  
    $contents=file_get_contents('http://www.baidu.com');
    $path="D:/wamp/www/a.txt";
    file_put_contents($path, $contents);
?>

 

结果:

  修改文件名:bool rename ( string $oldname , string $newname [, resource $context ] );

其他

 

总结:

  目录相关操作:

    目录信息函数,目录遍历函数,磁盘大小空间,目录删改命名

  文件相关操作:

    文件打开操作

    文件不打开操作

 

转载于:https://www.cnblogs.com/zhengfengyun/p/5911051.html

PHP文件操作

阅读数 1196

php文件系统

阅读数 7

没有更多推荐了,返回首页