欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP 文件系统

程序员文章站 2022-03-20 09:09:12
...
文件?理函?

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?停止?行。

例子:

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:表示?有上?任何文件。

例子:0){                              echo "上?文件名?:".$_FILES['up_picture'][name]."
"; echo "上?文件?型:".$type."
"; echo "上?文件大小:".$_FILES['up_picture'][size]."
"; }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的同????出一?警告。

 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指南。   

相关标签: PHP 文件系统