>  기사  >  백엔드 개발  >  PHP 文件系统

PHP 文件系统

WBOY
WBOY원래의
2016-06-23 14:30:12981검색

文件?理函?

1.文件操作.

  打开文件:

    打?指定的文件??返回相?的?象,若不存在指定的文件,那?可能?自??建??文件。

    resource fopen(string filename,string mode [,int use_include_path][,resource context]);

      filename 可以是包含文件路径的文件名,也可以是某种协议给出的URL(打开远程文件).为了避免系统切换带来的麻烦,采用'/'作为路径分隔符.

      mode: 设置打开文件的方式,分别有:

           r:只读模式,文件指针位于文件头部.  

           r+:只读模式----读/写模式,文件指针位于头部文件.注意可能产生覆盖.

           w:只写模式,文件指针位于文件头部.如果文件存在,删除内容重写;否则,自行创建文件.

           w+:只写模式----读写文件,读/写文件指针指向文件头部.如果文件存在,删除内容重写;否则,自行创建文件.

           x:谨慎写----写模式打开文件,从文件头部开始写如.如果文件存在,返回false,产生一个E_WARNING级别的错误信息

           x+:谨慎写---读写模式代开文件.如果文件存在,返回false,产生一个E_WARNING级别的错误信息

           a:追加,文件指针指向文件尾部.如果文件存在,则直接在文件尾追加;否则,自行创建文件.

           a+:追加,文件指针指向文件尾部.如果文件存在,则直接在文件尾追加或者读取;否则,自行创建文件.

           b:二进制模式.用于与其他模式进行链接.(windows 下的选项)

           t: 用于与其他模式进行结合.(windows 下的选项)

    请慎用fopen()函数,因为一不小心就有可能将文件删除掉.同时,不同的操作系统具有不同的行结束习惯(UNIX:\n     Windows:\r\n  Macinitosh:\r).如果错误的使用行结束符,那么当打开文件时,可能输出一堆乱码.以上可以通过"'t'","'b'"来避免.

读取文件:

  string fgetc(resource handle);//返回从handle指向的文件中的一个字符.如果遇到EOF,则返回false;

  string fgets(int handle[,int length]);//从文件指针指向的位置获取一行字符,并且返回最大为length-1个字节的字符串..文件指针必须有效,且指向一个由fopen()或fsockopen()成功打开的文件.length表示读取的数据的长度.在遇到换行,EOF,或者指定length时结束.忽略length将读到行结束.

  string fgetss(resource handle[,int length][,string allowable_tags]);//读取一行,且过滤掉html,php标记.

  string fread(int handle,int length);//?文件中?取任意?度的??。,?可以用於?取二?制文件。handle ?指向文件的?源,length ?取length?字?或者遇到EOF?停止?行。

例子:<?php             $filename="./files.text";             $fp=fopen($finename,"rb");             $encho fread($fp,100);        ?>

readfile(),file()和file_get_contents()函?.

  int readfile(string filename[,bool use_include_path,resource context]);//?取一?文件??入到???,如果成功,?返回?取的字??,否?返回false。filename文件名。??use_include_path控制是否支持在include_path中搜索文件,true?支持。使用readfile函?不需要打?/??文件。

  array file(string filename [,bool use_include_path[,resource context]]);//?整?文件的?容?取到??中。如果成功,返回??,??中的每?元素都是文件中??的一行,包活?行符在?;否?返回false;

    string file_get_contents(string filename[,bool use_include_path[,resource context[,int offset[,int maxlen]]]]);//context ?5.0新增的?容,可以用NULL?忽略。offset,maxlen?5.1的的?容。offset 用於??文件?始的位置,maxlen ?置文件?取的?度。?方法?用於二?制文件的?取。是?文件?容?入到一?字符串的首?方法。如果操作系?支持,??使用?存映射技??增?性能。如果打?有特殊字符的URL(例如存在空格),那?要使用urlencode()??行URL??。

 

??:readfile(),file()和file_get_contents()在?取整?文件?中的?容?,不需要使用fopen()和fclose()函?,但是在?取一?字符,一行字符和任意?的字符??必?使用。

 

2.?入文件:

    int fwrite(resource handle,string[,int length]);//?行文件的?入操作,它?有一??名fputs().?方法用於把string的?容?入文件指?handle?。如果?置length,那??入length?字?或者完成string?入後,操作就?停止。成功?入?返回true,否?返回false。

??:若?出length??,那?php.ini文件中的magic_quotes_runtime????被忽略,而string中的斜??不?被抽去。?分二?制文件和文本文件系??在打?文件?fopen()函?的mode??要加上‘b’。

      int file_put_contents(string filename,string data[.int flags[,resource context]]);//?一?字符串?入文件中,如果成功?返回字??,否?返回false。flags:???文件的?定(??有 file_use_include_path,file_append:追加,lock_ex:???定)。context一?context?源。

??:fwrite()?然具??入文件的功能,但是必?有fopen()和fclose()函?的支持。file_put_contents()整合了fopen(),fwrite(),fclose()功能,可以??完成文件的?入。

3.??文件

  文件有打?就??有??功能,?文件的操作?束後,??????文件,否?可能引起??。

  bool fclose(resouce handle);//???handle指向的文件??,如果成功?返回true,否?返回false。

 

?定文件

  在向一?文本文件中?入??的?候,需要先?定文件,已防止其他用?同?也修改此文件的?容。php中通?flock()函???文件的?定。

   bool flock(int handle ,int operation);//??operation控制?定?限。包括:lock_sh:取得共享?定(?取程序)。lock_ex:取得???定(?入)。lock_un:?放?定。lock_nb:防止flock()函?在?定?堵塞。

 

目??理函?

  目?是一?特殊的文件。既然是文件,如果?其?行操作,同?必?先打?,然後才可以?行??操作,最後?要?得??。

1.打?目?

  打?指定的目?文件,若果成功,?返回目?的句柄。否?返回false。?打?文件不同的是,若目?不存在,它?不?自??建目?,而是?出一???信息。通?在opendir()函?前加“@”符?,可以屏蔽??信息的?出。

  resource opendir(string path[,resource context]);//path指定要打?的目?文件。如果path指定的不是一?有效的目?,或者因??限??,文件系???不能打?,那??函???返回false,?且?生一?E_WARNING??的??信息。

2.??目?

 利用opendir函?返回的句柄配合scandir函?????操作。

  array scandir(string directory[,int sorting_ordering[,resource context]]);//用於??指定路?下的目?和文件。如果成功?返回包含文件名的array,否?返回false。directory指定要??的目?,如果不是目?,那??返回false,?且?生一?E_WARNING??的??信息。sorting_order?置排列?序,默??字母升序排列。如果?上???,???降序排列。

??:is_dir()函?,判?指定文件名是否一?目?。如果文件名存在且?目?,?返回true,否?返回false。如果是相?目?,?按照?前工作目??查其相?路?。

 

3.??目?。

  void closedir(resource handle);//handle,要??的工作目?的句柄。

 

??:前面已?了解到,若打?的目?不存在,系??不??我??建目?。那?我?可以自行?建想要的目?。可以?用以下函?:

    mkdir()函?:新建一?目?,成功?返回true,否?false。

    rmdir()函?:?除目?。目?必??空(目?中?文件或者子目?),且要有操作的?限。

    unlink()函?:?除文件,成功?返回true,失?返回false。

 

文件上?、下?原理        

步??容:

  步?1:控制上?文件,通?php.ini文件配置。

  步?2:?上?文件?行判?。上?文件的大小,格式等。

  步?3:?行上?文件的操作方法。

 

1.控制上?文件:

  php通??php.ini?上?文件?行控制,包括:是否支持上?、上?文件的??目?、上?文件的大小、指令?行的???指令分配的?存空?。

    在php.ini文件中定位到file uploads??,完成?上述??的?置。??含?如下:

    file_uploads:如果是on,?明服?器支持文件上?,如果?off,?不支持。一般默?是支持的,此??不必修改。

    upload_tem_dir:上?文件的??目?。在文件上?成功之前,文件首先保存在服?器的??目?中。多?使用系?默?目?,但是也可以自行?置。

    upload_max_filesize:服?器允?上?文件的最大值,以MB??位。系?默??2MB,若超???修改其值。

    max_execution_time:php中一?指令所能?行的最???,?位是秒。?指令在?行上?超大文件?必?修改,否?及?上?文件在服?器允?的???,但是超?指令所能?行的最???,仍然?法??上?。

    memory_limit:php中一?指令所分配的?存空?,?位?MB。它的大小同??影?到超大文件的上?。

 

??:在客?端中控制上?文件?用的?form表?中的enctype和method?性,以及?藏域MAX_FILE_SIZE.

    enctype="multipart/form-data":指定表?????方式。

    method="post":指定????的方式。

    :通??藏域控制上?文件的大小,?位?字?。?值不能超?php.ini配置文件中的upload_max_filesize???置的值。它不能完全控制上?文件的大小,只能避免一些不必要的麻?。

2.判?上?文件

  ?上?文件?行判??用的是全局?量$_FILES,$_FILES是一???,它包含所有上?文件的信息。??中各?元素含?如下:

    $_FILES[filename][name]:存?上?文件的文件名,如text.txt,title.jpg等。

    $_FILES[filename][size]:存?文件的大小,?位?字?。

    $_FILES[filename][tem_name]:存?文件在??目?中使用的文件名,因?文件在上??首先要?其以??文件的身份存?在??目?中。

    $_FILES[filename][type]:存?上?文件的MIME?型。MIME?定各?文件格式的?型,每?MIME?型都?由“/”分隔的主?型和子?型?成。例如:"image/gif"的主?型??像,子?型?GIF格式的文件。"text/html"代表文本的HTML文件。

    $_FILES[filename][error]:存?文件上?的??代?:此?目?PHP4.2.0版本中新增?容。它的返回值由5?:

      0:表示?有任何??。文件上?成功。

      1:表示上?文件的大小超出配置文件指令upload_max_filesize??的限定值。

      2:表示上?文件的大小超出HTML表?中max_file_size??所指定的值。

      3:表示文件只被上?了一部分。

      4:表示?有上?任何文件。

例子:<?php         /*判?是否由上??片*/         if(!empty($_FILES['up_picture'][name])){               /*??片信息?值??量*/               $type=strtolower(strstr($_FILES['up_picture'][name],"."));                if($type != '.jpg' && $type != '.gif') echo "你上?的文件格式不?";                else{                      if($_FILES['up_picture'][size]<2000000 && $_FILES['up_picture'][size]>0){                              echo "上?文件名?:".$_FILES['up_picture'][name]."<br/>";                              echo "上?文件?型:".$type."<br/>";                              echo "上?文件大小:".$_FILES['up_picture'][size]."<br/>";                      }else   echo "?片大小不符合要求。";                }         }?>

 

 3.文件上?。

  php中?用move_uploaded_file()函???文件上?。但在?行之前,?了防止?在的攻??原本不能通??本交互的文件?行非法管理,可以先?用is_uploaded_file()函?判?指定的文件是否通?HTTP POST上?的,如果是?返回true。通??函?,可以?保?意的用??法欺??本去??不能??的文件。

   bool is_uploaded_file(string name);//用於判?指定的文件是否通?HTTP POST上?的。filename必??似於$_FILES[‘filename’][‘temp_name’]的?量,不可以使用?客?端上?的文件名$_FILES[‘filename’][‘name’]。

   move_upload_file(string filename,string destination);//?函?用於?文件上?到服?器中指定的位置。如果成功,?返回true,否?返回false。filename指定上?文件的??文件名,即$_FILES['tmp_name'],??destination指定文件上?後保存的新路?和名?。如果??不是合法的上?文件,不?出?任何操作,?函??返回false。如果是合法的上?操作,但是由於某些原因?法移?,?不?出?任何操作,返回false的同????出一?警告。

<?php    if( !empty($_FILES[ 'up_picture' ][ 'name' ])){         if( $_FILES['up_picture']['error'] > 0){            echo "上???!";            switch($_FILES['up_picture']['error']){                  case 1:                            echo "上?文件超出配置文件?定值";                            break;                  case 2:                            echo "上?文件超出表??定值";                            break;                  case 3:                            echo "上?文件不全";                            break;                  case 4:                            echo "?有上?文件";                            break;            }         }else{             if( ! is_dir('./upfile/') ) mkdir('./upfile/');             $path='./upfile/'.time().$_FILES['up_picture' ][ 'name' ];             if( is_uploaded_filed( $_FILES['up_picture' ][ 'tmp_name' ] )){                 if(!move_uploaded_file( $_FILES['up_picture' ][ 'tmp_name' ] ,$path )){                    echo "上?失?!";                 }else{                     echo "文件".time().$_FILES['up_picture' ][ 'name' ] ."上?成功,大小?:".$_FILES['up_picture' ][ 'size' ] ;                 }             }else{                 echo "上?文件".$_FILES['up_picture' ][ 'name' ]."不合法";             }       }    }?>

 

 

4.文件下?

      ??介?通?http方式下?文件,主要用到header()函?。header()函??於HTTP函?,其作用是以HTTP?HTML文?的表?送到??器,?告???器具?怎??理???面。

   void header(string string[,bool replace[,int http_respone_code]]);//??string 指定?送的??。??replace控制如果一次?送多???,?於相似的??是替??是添加。如果是false,??制?送多?同?型的??,默??true。??http_respone_code?制?HTTP??代??置?指定值:

下?步?如下:

    a):通?"Content-Type" 指定文件的MIME?型。

    b):通?"Content-Disposition" ?文件?行描述,值"attachment;filename="test.jpg"" ?明是一?福建,同?指定下?文件的名?。

    c):通?"Content-Length" ?置下?文件的大小。

           d):通?readfile()函??取文件?容。

例如:header('Content-Type:image/jpg');header(' Content-Disposition:attachment;filename="test.jpg" ');header('Content-Length:'.filesize('test.jpg') );readfile('test.jpg');

 

 5.???程文件

  步?1:配置 php.ini 文件?? allow_url_fopen?置?on。??默?是??的,允?打?http和ftp指定的?程文件。如果 allow_url_fopen?置?off,?不允?打??程文件。

  步?2:使用fopen()函??取文件?容。根??容?建你想要的?源,保存到本地。

        

ps:更多php.ini配置文件中的文件操作 和 目?操作的?展方法??考官方php指南。   

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP Static关键字다음 기사:php 获得时间