您的位置:首页 > 编程语言 > PHP开发

陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作

2015-07-29 17:45 633 查看
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作

      描述:PHP程序设计语言中文件操作的函数很多,如何获取文件的信息,如果打开文件,如果关闭文件,读取文件,写入文件,复制文件,下载文件,上传文件等等操作都是贵阳网站建设中经常遇到的问题。陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作

一、文件编程
    文件对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频、声音...。

    文件编程的必要性:在贵阳网站建设开发中,我们要使用到文件的上传和下载,就是经典的文件编程使用。

    文件流:在对文件进行操作的过程中,我们是以流的概念来操作。




    从该图我们可以看出,如果你的数据是从程序(内存)向文件(磁盘)流动,则我们称为输出流,反之则称为输入流。

    流:数据在数据源(文件)和程序(内存)之间经历的路径。

    输入流:数据从数据源(文件)到程序(内存)的路径。

    输出流:数据从程序(内存)到数据源(文件)的路径。

二、php 文件操作的基本用法

文件编程(函数一览表)







 






1)如何获取文件的信息

fopen,fstat,fclose; 文件大小 filesize; filectime 、filemtime,fileatime …

陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作

fopen 打开文件

基本用法:fopen(文件路径[相对路径/绝对路径], 打开模式);

模式:





代码:

<?php

 //1文件信息,打开文件

 $file_path="test.txt";

 //该函数返回一个指向文件的指针

 if($fp=fopen($file_path,"r")){

  $file_info=fstat($fp);

  echo "<pre>";

  print_r($file_info);

  echo "</pre>";

  //取出看看

  echo "<br/>文件大小是 {$file_info['size']}";

  echo "<br/>文件上次修改时间 ".date("Y-m-d H:i:s)",$file_info['mtime']);

  echo "<br/>文件上次访问时间 ".date("Y-m-d H:i:s)",$file_info['atime']);

  echo "<br/>文件上次change时间 ".date("Y-m-d H:i:s)",$file_info['ctime']);

 }else{

  echo "打开文件失败";

 }

 fclose($fp); //关闭文件很重要

 //***第二种方式获取文件信息

 echo "<br/>".filesize($file_path);

 echo "<br/>".date("Y-m-d H:i:s",fileatime($file_path));

 echo "<br/>".filectime($file_path);

 echo "<br/>".filemtime($file_path);

?>

 

fstat函数:该函数返回有几个信息:

 [atime] => 1316831240    【该文件上一次被访问的时间】

    [mtime] => 1316831237     【该文件上一次内容被修改时间】

    [ctime] => 1316831228     【该文件上一次 文件所有者/文件所在组 修改】
2)如何读文件

   fread,file_get_contents,feof,str_replace, parse_ini_file用法

<?php

 //读文件

 //1.打文件

 $file_path="test.txt";

 //该函数返回一个指向文件的指针

 //先判断文件是否存在

 //************************第一种读取方法********************

/* if(file_exists($file_path)){

  //打开文件

  $fp=fopen($file_path,"a+");

  //读内容,并输入

  //**** 第一种读取方法**************

  $con=fread($fp,filesize($file_path));

  echo "文件的内容是:<br/>";

  //在默认情况下,我们得到内容输出到网页后,不会换行,因为网页

  //不认\r\n 是换行符, \r\n -><br/>

  $con=str_replace("\r\n","<br/>",$con);

  echo $con;

 }else{

  echo "文件不存在!";

 }

 fclose($fp);*/

 //*************第二种读取方法,一个函数****************

/* $con=file_get_contents($file_path);

 //替换

 $con=str_replace("\r\n","<br/>",$con);

 echo $con;*/

 //*************第三种读取方法,循环读取(对付打文件)*********

 $fp=fopen($file_path,"a+");

 //我们设置一次读取1024个字节

 $buffer=1024;

 $str="";

 //一边读,一边判断是否到达文件末尾

 while(!feof($fp)){

  $str=fread($fp,$buffer); //读

 }

 $str=str_replace("\r\n","<br/>",$str);

  echo $str;

 fclose($fp);

?>

3)文件读取的实际用法

    我们连接数据库的时候,可以把用户名、密码、主机配置到一个外部文件,然后再php运行时,实时的获取。

db.ini

host=192.168.1.23

user=admin

password=12345

dbname=test

<?php

 $arr1=parse_ini_file("db.ini");

 print_r($arr1);

?>

4)如何写文件

fwrite 

<?php

 //如何写文件

 //1.传统的方法

/* $file_path="test.txt";

 if(file_exists($file_path)){

  //如果是追加内容,则使用a+ append

  //如果是全新的写入到文件 ,则使用 w+ write

  $fp=fopen($file_path,"w+");

  $con="\r\n你好!";

  for($i=0;$i<10;$i++){

   fwrite($fp,$con);

  }

 }else{

 }

 echo "添加ok";

 fclose($fp);*/

 //2.第二种方式写入文件

 $file_path="test.txt";

 $con="北京你好!\r\n";

 for($i=0;$i<10;$i++){

  $con.="北京你好!\r\n";

 }

 file_put_contents($file_path,$con,FILE_APPEND);

 echo "ok";

?>

5)拷贝一个文件(图片) copy

<?php

 //拷贝图片

 $file_path=iconv("utf-8","gb2312","C:\\Documents and Settings\\All Users\\Documents\\My Pictures\\示例图片\\Winter.jpg");

 if(!copy($file_path,"d:\\bb.jpg")){

  echo "error";

 }else{

  echo "ok";

 }

?>

6)文件的下载

print 、is_file
     参看我们的http课程《一步一步跟我学PHP》第37讲:HTTP协议请求(响应)

7)文件创建、删除,文件夹的创建和删除

<?php

 //文件及文件夹的创建和删除.

 //1.创建文件夹 d:/shunping 

/* if(!is_dir("d:/shunping2")){

  if( mkdir("d:/shunping2")){

   echo "创建文件夹ok";

  }else{

   echo "创建文件夹err";

  }

 }else{

  echo "该文件夹有了"; 

 }*/

 //2.能不能一次性多个文件(层级),创建ok

/* $path="d:/shunping3/aaa/bbb/cccc/ddd";

 if(!is_dir($path)){

  if( mkdir($path,0777,true)){

   echo "创建文件夹ok";

  }else{

   echo "创建文件夹err";

  }

 }else{

  echo "该文件夹有了"; 

 }*/

 //3.删除文件夹

 //如果文件夹下有文件,或者目录,均不能删除ok

/* if(rmdir("d:/shunping2")){

  echo "删除文件夹ok";

 }else{

  echo "err";

 }*/

 //4.文件的创建

 //在d:/shunping3 目录下,创建一个文件并写入hello

/* $file_path="d:/shunping3/aa.txt";

 $fp=fopen($file_path,"w+");

 fwrite($fp,"hello,world");

 fclose($fp);

 echo "创文件ok";*/

 //5.删除文件

 $file_path="d:/shunping3/aa.txt";

 if(is_file($file_path)){

  if(unlink($file_path)){

   echo "删除ok";

  }else{

   echo "删除error";

  }

 }else{

  echo "文件不存在";

 }

?>

三、综合运用一下文件操作的各个函数






*********************案例文件最好找一个文本文件来测试******************** 

***案例代码***

<html>

<head>

<title></title>

</head>

<body>

<?php 

 //得到文件名字

 $file_full_path="";

 $contents="";

    if(!empty($_GET['flag'])){

  $flag=$_GET['flag'];

  if($flag=="open"){

   //读取文件

   if(!empty($_POST["myfile"])){

    $file_full_path=$_POST["myfile"];

    $file_full_path=str_replace("\\","\\\\",$file_full_path);

    $file_full_path=iconv("utf-8","gb2312",$file_full_path);

    //把文件名存入session

    session_start();

    $_SESSION['myfile1']=$file_full_path;

    $contents=file_get_contents($file_full_path);

    

   }else{

    

   }

  }else if($flag=="save"){

   //接收

   $str=$_POST['file_con'];

   session_start();

   $file_full_path=$_SESSION['myfile1'];

   file_put_contents($file_full_path,$str);

   echo "保存ok";

  }

 }

?>

<h1>文件编程课堂案例</h1>

<form action="fileexe.php?flag=open" method="post">

请选择文件: <input type="file" name="myfile"/>

<input type="submit" value="打开文件"/>

</form>

<form action="fileexe.php?flag=save" method="post">

<textarea rows="20" id="file_con" name='file_con' cols="70">

<?php echo $contents;?>

</textarea><br/>

<input type="hidden" name="file_path" value="<?php echo $file_full_path;?>"/>

<input type="submit"  value="保存文件"/><br/>

</form>

</body>

</html>

 

四、php文件编程实际运用——文件上传






upload.php 这是一个上传文件的界面。如果要上传文件,我们需要把form 设置为enctype=” multipart/form-data”,并采用post提交,这样就告诉服务器提交的内容可能有文件内容。

<form action=”” enctype=” multipart/form-data” method=”post”>

上传文件<input type=”file” name=”myfile”/>

<input type=”sumbit” value=”上传”/>

</form>

上传文件需要考虑的细节:

(1), 如何控制用户上传的文件大小。Apache默认为< 2m,可以设置。

 $file_size=$_FILES['myfile']['size'];

 if($file_size>2*1024*1024){

  echo "文件过大,不能上传大于2m文件";

  exit();

 }

(2), 如何控制用户上传的文件类型。

if($file_type!='image/jpg' && $file_type!='image/pjpeg'){

(3), 如何防止用户图片覆盖问题。

$user_path=$_SERVER['DOCUMENT_ROOT']."/file/up/".$username;

(4), 如何防止同一个用户上传的文件名相同问题。

 $file_true_name=$_FILES['myfile']['name'];

 $move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));

upload.php程序设计源代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

 <head>

  <link rel="stylesheet" href="../css/my.css" type="text/css" />

 </head>

 <div class="register">

 <!-- 文件上传要注意:①enctype  ②method post-->

  <form enctype="multipart/form-data" method="post"  action="uploadprocess.php" name="myform">

  <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="fileintro" 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>

 </div>

</html>

uploadprocess.php程序设计代码:

<?php

 //1.接收提交文件的用户

 $username=$_POST['username'];

 $fileintro=$_POST['fileintro'];

 //echo $username.$fileintro;

 //我们这里需要使用到 $_FILE

/* echo "<pre>";

 print_r($_FILES);

 echo "</pre>";*/

 $file_size=$_FILES['myfile']['size'];  //获取文件的大小

 if($file_size>2*1024*1024){

  echo "文件过大,不能上传大于2m文件";

  exit();

 }

 $file_type=$_FILES['myfile']['type']; //获取文件的类型

 if($file_type!='image/jpg' && $file_type!='image/pjpeg'){

  echo "文件类型只能是 jpg的";

  exit();

 }

 if(is_uploaded_file($_FILES['myfile']['tmp_name'])){ //判断是否上传成功

  //把文件转存到你希望的目录Move_uploaded_file();

        $uploaded_file=$_FILES['myfile']['tmp_name'];

  //我们给每个用户动态的创建一个文件夹

  $user_path=$_SERVER['DOCUMENT_ROOT']."/file/up/".$username;

       //Echo $user_path;//输出路径看看是否有误

  $user_path=iconv("utf-8","gb2312",$user_path);

  //判断该用户是否已经有文件夹

  if(!file_exists($user_path)){

   mkdir($user_path);

  }

  //$move_to_file=$user_path."/".$_FILES['myfile']['name']; 

  $file_true_name=$_FILES['myfile']['name'];

 $move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));

 if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))){

   echo $_FILES['myfile']['name']."上传ok";

  }else{

   echo "上传失败";

  }

 }else{

  echo "上传失败";

 }

?>

推荐阅读】陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: