PHP自学之路------PHP文件编程

来源:互联网 发布:手机解压缩包软件 编辑:程序博客网 时间:2024/05/29 17:08

文件编程
文件编程的必要性
在网站开发中,我们要使用到文件的上传和下载,就是经典的文件编程的使用
文件的基本概念
文件就是保存数据(二进制素具,文本数据),在程序员看来,文件就是数据的来源。
文件流
在对文件进行操作的过程中,我们以流的概念来操作

 
从该图中我们可以看出,如果你的数据是从程序(内存)向文件(磁盘)流动,则我们成为输出流,反之输入流。
文件-操作的方式
本地操作和远程操作(通过网络)

常用的文件操作函数
获取文件信息函数

   
<?php    //文件的基本信息    //1、fopen 打开文件,参数 URL及 打开方式MOde        $file_path = "/var/myphp/file/file.txt";    //该函数返回一个指向文件的指针    //chmod($file_path, 777);    $fp = fopen($file_path, "r+");        if($fp){    //fstat 获得文件的信息    $file_info = fstat($fp);    echo "<pre>";    print_r($file_info);    echo "</pre>";        echo "文件大小".$file_info['size'];        } else{    echo "fopen file error!</br>";    }            //关闭文件!!必须关闭    fclose($fp);        //****获取文件信息第二种方式        echo "<br/>".filesize($file_path);    echo "<br/>".filemtime($file_path);    echo "<br/>".filectime($file_path);    echo "<br/>".fileatime($file_path); ?>


读文件获得文件内容

<?php/** * * @author jsh * @version  */        $file_path = "/var/myphp/file/file.txt";    //该函数返回一个指向文件的指针        /**********************一种读取方式***********************    if(file_exists($file_path)){    if($fp = fopen($file_path,"r+")){    $con = fread($fp, filesize($file_path));    echo "文件的内容是:</br>";    //注意:在默认情况下,我们得到的内容输出到网页后,是没有换行的    //不认\r\n 需要进行下面的替换    $con1 = str_replace("\n", "</br>", $con);    echo $con1;    }else{    echo "file open error!";    }    }else{    echo "file is not exist!";    }   fclose($fp);   */    /***********************第二种读取方式****************    $con = file_get_contents($file_path);    $con1 = str_replace("\n", "</br>", $con);    echo $con1;    */       /***********************第三种读取方式************/    if(file_exists($file_path)){    if($fp = fopen($file_path,"r+")){    $buffer= 1024;    //一边读,一边判断是都到文件的末尾    while(!feof($fp)){        $con = fread($fp, $buffer);        echo "文件的内容是1111:</br>";         //注意:在默认情况下,我们得到的内容输出到网页后,是没有换行的        //不认\r\n 需要进行下面的替换        $con1 = str_replace("\n", "</br>", $con);        echo $con1;    }    }else{    echo "file open error!";    }    }else{    echo "file is not exist!";    }    fclose($fp);        //文件内容   $arr =  parse_ini_file($file_path);      echo "<pre>";   print_r($arr);   echo "</pre>";


写文件
        
<?php    //如何写文件        $file_path = "/var/myphp/file/file.txt";        /*************传统的方法******************     if(file_exists($file_path)){     //如果是追加内容,使用a+     //如果是全新的写到文件,则使用w+,清空原文件再写入        if($fp = fopen($file_path,"a+")){            $buf="asd123123\n";            fwrite($fp, $buf);         }else{              echo "file open error!";          }     }else{          echo "file is not exist!";     }     fclose($fp);     */    /***************另外方法**************/    $con = "woaini\n";    //默认情况,即不加第三个参数,则是w+方式    file_put_contents($file_path, $con,FILE_APPEND);    echo "write Ok!";    //注意,此函数在底层调用fopen fwrite,调用这个函数一般不使用循环写        


拷贝一个文件

<?php    //拷贝一个文件    //copy函数    /***********注意***********     * 默认情况下路径是不能带汉字的,如果使用汉字     * 需要只用iconv("utf-8","gb2312","date");转换下     */    $file_path="file.txt";    $new_file="1.txt";    if(!copy($file_path, $new_file)){    echo "copy error!";    }else{    echo "copy OK!";    }


文件下载
        http://blog.csdn.net/sjin_1314/article/details/8981745
文件创建,删除,文件的创建,删除

<?php    //文件及文件夹的创建和删除        /************创建文件夹************    $dir_name="/var/jsh1";    if(!is_dir($dir_name)){    if(mkdir($dir_name)){    echo "创建文件成功!</br>";    }else{    echo "创建失败!</br>";    }    }else{    echo "文件夹存在!</br>";    }    */    /*********创建多级目录*****/    $dir_name="/var/jsh1/aaa/bbb/ccc";    if(!is_dir($dir_name)){    if(mkdir($dir_name,0777,true)){    echo "创建文件成功!</br>";    }else{    echo "创建失败!</br>";    }    }else{    echo "文件夹存在!</br>";    }        /*********删除文件夹********/    //如果文件夹下有文件,或者目录,均不能删除    if(rmdir("/var/jsh1/aaa/bbb/ccc")){    echo "删除文件夹Ok!</br>";    }        /*************创建文件*********/    $file_name="/var/jsh1/1.txt";    if($fp = fopen($file_name,"w+")){    $buf="asd123123\n";    fwrite($fp, $buf);        }else{    echo "file open error!";    }        /***********删除文件******/    //2个方法 delete 和unlink        if(is_file($file_name)){    if(unlink($file_name)){    echo "删除成功!</br>";    }    }else{    echo "文件不存在!</br>";    }

•          文件上传
如果要上传文件,需要把
<formenctype="multipart/form-data"action="upLoad.php"name="myform"method="post">
Enctype  post 必须填写成上面内容:下面界面如下:


                采用前面讲解的Mvc模式,代码如下:

界面(V):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>文件上传</title></head><body>    <form enctype="multipart/form-data" action="upProcess.php" name="myform" method="post">         <table>         <tr><td align="center" colspan="2" ><font style="font-size: 40px;          font-family:华文彩云">文件上传</font></td></tr>         <tr><td>请填写用户名:</td><td><input type="text" name="username" ></td></tr>         <tr><td>请简单介绍该文件:</td><td><textarea name="fileinfo" rows="10" cols="80"></textarea></td></tr>         <tr><td>请选择要上传的文件:</td><td><input type="file" name="myfile"></td></tr>         <tr><td><input type="submit" value="上传文件"></td><td></td></tr>         </table>    </form></body></html>

控制器(c)

<?php        //获得提交文件的用户    $username=$_POST['username'];    $fileinfo=$_POST['fileinfo'];            //我们这边需要使用到$FILES超全局数组,获得上传文件属性,打印如下        echo "<pre>";    print_r($_POST);    print_r($_FILES);    echo "</pre>";        //获取文件的大小    $file_size=$_FILES['myfile']['size'];    if($file_size > 2*1024*1024){    echo "文件过大!,不能上传大于2M的文件</br>";        exit(1);    }    //获取文件的类型    $file_type = $_FILES['myfile']['type'];    if($file_type!='image/jpg' && $file_type!='image/jpeg' ){    echo "文件类型只能是jpg的!</br>";    exit(1);    }            //判断是否上传成功    if(is_uploaded_file($_FILES['myfile']['tmp_name'])){        //把文件转存到指定的目录    /*注意:     * 上传文件的大小,在php.ini文件中有说明,默认最大2M,可以自己设置     *      * */        //我们给每个用户动态的创建一个文件夹    $user_path = "/var/myphp/file/".$username;        //判断该用户是否存在文件夹    if(!file_exists($user_path)){    if(mkdir($user_path)){    echo "创建成功!</br>";    }    }        //$file_path=$user_path.$_FILES['myfile']['name'];    $file_name=$_FILES['myfile']['name'];    $file_path=$user_path."/".time().rand(1,1000).substr($file_name, strrpos($file_name, '.'));    if(move_uploaded_file($_FILES['myfile']['tmp_name'], $file_path)){    echo "上传成功!</br>";    }else{    echo "上传失败2!</br>";    }    }else{    echo "上传失败1!</br>";    }        ?>

上传文件细节
1.        如果控制用户上传文件的大小<2M
2.        如果控制用户上传的文件类型
3.        如果防止用户图片覆盖问题
解决方法:
给每个用户创建一个文件夹(或者按照日期),将个人的文件保存的自己的文件夹里面
4.        如果防止同一用户文件名相同的问题
格式:路径.时间戳.文件后缀
$file_path=$user_path."/".time().rand(1,1000).substr($file_name,strrpos($file_name,'.'));

    参考资料:

   PHP文件上传后缀名与文件类型对照表 

文件编程到此结束,有深入的问题欢迎在下面指出!
原创粉丝点击