欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP 文件系統(tǒng)詳解

 更新時(shí)間:2012年09月13日 23:12:27   作者:  
PHP 文件系統(tǒng)詳解,包括打開(kāi)文件,讀取目錄,上傳下載等
文件處理函數(shù)
1.文件操作.
  打開(kāi)文件:
    打開(kāi)指定的文件時(shí)會(huì)返回相應(yīng)的對(duì)象,若不存在指定的文件,那麼可能會(huì)自動(dòng)創(chuàng)建這個(gè)文件。
    resource fopen(string filename,string mode [,int use_include_path][,resource context]);
      filename 可以是包含文件路徑的文件名,也可以是某種協(xié)議給出的URL(打開(kāi)遠(yuǎn)程文件).為了避免系統(tǒng)切換帶來(lái)的麻煩,采用'/'作為路徑分隔符.
      mode: 設(shè)置打開(kāi)文件的方式,分別有:
           r:只讀模式,文件指針位于文件頭部.
           r+:只讀模式----讀/寫(xiě)模式,文件指針位于頭部文件.注意可能產(chǎn)生覆蓋.
           w:只寫(xiě)模式,文件指針位于文件頭部.如果文件存在,刪除內(nèi)容重寫(xiě);否則,自行創(chuàng)建文件.
           w+:只寫(xiě)模式----讀寫(xiě)文件,讀/寫(xiě)文件指針指向文件頭部.如果文件存在,刪除內(nèi)容重寫(xiě);否則,自行創(chuàng)建文件.
           x:謹(jǐn)慎寫(xiě)----寫(xiě)模式打開(kāi)文件,從文件頭部開(kāi)始寫(xiě)如.如果文件存在,返回false,產(chǎn)生一個(gè)E_WARNING級(jí)別的錯(cuò)誤信息
           x+:謹(jǐn)慎寫(xiě)---讀寫(xiě)模式代開(kāi)文件.如果文件存在,返回false,產(chǎn)生一個(gè)E_WARNING級(jí)別的錯(cuò)誤信息
           a:追加,文件指針指向文件尾部.如果文件存在,則直接在文件尾追加;否則,自行創(chuàng)建文件.
           a+:追加,文件指針指向文件尾部.如果文件存在,則直接在文件尾追加或者讀取;否則,自行創(chuàng)建文件.
           b:二進(jìn)制模式.用于與其他模式進(jìn)行鏈接.(windows 下的選項(xiàng))
           t: 用于與其他模式進(jìn)行結(jié)合.(windows 下的選項(xiàng))
    請(qǐng)慎用fopen()函數(shù),因?yàn)橐徊恍⌒木陀锌赡軐⑽募h除掉.同時(shí),不同的操作系統(tǒng)具有不同的行結(jié)束習(xí)慣(UNIX:\n Windows:\r\n Macinitosh:\r).如果錯(cuò)誤的使用行結(jié)束符,那么當(dāng)打開(kāi)文件時(shí),可能輸出一堆亂碼.以上可以通過(guò)"'t'","'b'"來(lái)避免.
讀取文件:
  string fgetc(resource handle);//返回從handle指向的文件中的一個(gè)字符.如果遇到EOF,則返回false;
  string fgets(int handle[,int length]);//從文件指針指向的位置獲取一行字符,并且返回最大為length-1個(gè)字節(jié)的字符串..文件指針必須有效,且指向一個(gè)由fopen()或fsockopen()成功打開(kāi)的文件.length表示讀取的數(shù)據(jù)的長(zhǎng)度.在遇到換行,EOF,或者指定length時(shí)結(jié)束.忽略length將讀到行結(jié)束.
  string fgetss(resource handle[,int length][,string allowable_tags]);//讀取一行,且過(guò)濾掉html,php標(biāo)記.
  string fread(int handle,int length);//從文件中讀取任意長(zhǎng)度的數(shù)據(jù)。,還可以用于讀取二進(jìn)制文件。handle 為指向文件的資源,length 讀取length個(gè)字節(jié)或者遇到EOF時(shí)停止執(zhí)行。
例子:
復(fù)制代碼 代碼如下:

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

readfile(),file()和file_get_contents()函數(shù).
readfile(),file()和file_get_contents()函數(shù).
  int readfile(string filename[,bool use_include_path,resource context]);//讀取一個(gè)文件并寫(xiě)入到緩沖區(qū),如果成功,則返回讀取的字節(jié)數(shù),否則返回false。filename文件名。參數(shù)use_include_path控制是否支持在include_path中搜索文件,true為支持。使用readfile函數(shù)不需要打開(kāi)/關(guān)閉文件。
  array file(string filename [,bool use_include_path[,resource context]]);//將整個(gè)文件的內(nèi)容讀取到數(shù)組中。如果成功,返回?cái)?shù)組,數(shù)組中的每個(gè)元素都是文件中對(duì)應(yīng)的一行,包活換行符在內(nèi);否則返回false;
  string file_get_contents(string filename[,bool use_include_path[,resource context[,int offset[,int maxlen]]]]);//context 為5.0新增的內(nèi)容,可以用NULL來(lái)忽略。offset,maxlen為5.1的的內(nèi)容。offset 用于標(biāo)記文件啓始的位置,maxlen 設(shè)置文件讀取的長(zhǎng)度。該方法適用于二進(jìn)制文件的讀取。是將文件內(nèi)容讀入到一個(gè)字符串的首選方法。如果操作系統(tǒng)支持,還會(huì)使用內(nèi)存映射技術(shù)來(lái)增強(qiáng)性能。如果打開(kāi)有特殊字符的URL(例如存在空格),那麼要使用urlencode()來(lái)進(jìn)行URL編碼。

備注:readfile(),file()和file_get_contents()在讀取整個(gè)文件夾中的內(nèi)容時(shí),不需要使用fopen()和fclose()函數(shù),但是在讀取一個(gè)字符,一行字符和任意長(zhǎng)的字符時(shí)則必須使用。

2.寫(xiě)入文件:
    int fwrite(resource handle,string[,int length]);//執(zhí)行文件的寫(xiě)入操作,它還有一個(gè)別名fputs().該方法用于把string的內(nèi)容寫(xiě)入文件指針handle處。如果設(shè)置length,那麼寫(xiě)入length個(gè)字節(jié)或者完成string寫(xiě)入后,操作就會(huì)停止。成功寫(xiě)入則返回true,否則返回false。
備注:若給出length參數(shù),那麼php.ini文件中的magic_quotes_runtime選項(xiàng)將會(huì)被忽略,而string中的斜線將不會(huì)被抽去。區(qū)分二進(jìn)制文件和文本文件系統(tǒng)則在打開(kāi)文件時(shí)fopen()函數(shù)的mode參數(shù)要加上‘b'。
   int file_put_contents(string filename,string data[.int flags[,resource context]]);//將一個(gè)字符串寫(xiě)入文件中,如果成功則返回字節(jié)數(shù),否則返回false。flags:實(shí)現(xiàn)對(duì)文件的鎖定(選項(xiàng)有 file_use_include_path,file_append:追加,lock_ex:獨(dú)佔(zhàn)鎖定)。context一個(gè)context資源。
備注:fwrite()雖然具備寫(xiě)入文件的功能,但是必須有fopen()和fclose()函數(shù)的支持。file_put_contents()整合了fopen(),fwrite(),fclose()功能,可以單獨(dú)完成文件的寫(xiě)入。
3.關(guān)閉文件
  文件有打開(kāi)就應(yīng)該有關(guān)閉功能,對(duì)文件的操作結(jié)束后,應(yīng)該關(guān)閉這個(gè)文件,否則可能引起錯(cuò)誤。
  bool fclose(resouce handle);//將參數(shù)handle指向的文件關(guān)閉,如果成功則返回true,否則返回false。

鎖定文件
  在向一個(gè)文本文件中寫(xiě)入數(shù)據(jù)的時(shí)候,需要先鎖定文件,已防止其他用戶(hù)同時(shí)也修改此文件的內(nèi)容。php中通過(guò)flock()函數(shù)實(shí)現(xiàn)文件的鎖定。
   bool flock(int handle ,int operation);//參數(shù)operation控制鎖定權(quán)限。包括:lock_sh:取得共享鎖定(讀取程序)。lock_ex:取得獨(dú)佔(zhàn)鎖定(寫(xiě)入)。lock_un:釋放鎖定。lock_nb:防止flock()函數(shù)在鎖定時(shí)堵塞。

目錄處理函數(shù)
  目錄是一種特殊的文件。既然是文件,如果對(duì)其進(jìn)行操作,同樣必須先打開(kāi),然后才可以進(jìn)行瀏覽操作,最后還要記得關(guān)閉。

1.打開(kāi)目錄

  打開(kāi)指定的目錄文件,若果成功,則返回目錄的句柄。否則返回false。與打開(kāi)文件不同的是,若目錄不存在,它并不會(huì)自動(dòng)創(chuàng)建目錄,而是拋出一個(gè)錯(cuò)誤信息。通過(guò)在opendir()函數(shù)前加“@”符號(hào),可以屏蔽錯(cuò)誤信息的輸出。
  resource opendir(string path[,resource context]);//path指定要打開(kāi)的目錄文件。如果path指定的不是一個(gè)有效的目錄,或者因?yàn)闄?quán)限問(wèn)題,文件系統(tǒng)錯(cuò)誤不能打開(kāi),那麼該函數(shù)將會(huì)返回false,并且產(chǎn)生一個(gè)E_WARNING級(jí)別的錯(cuò)誤信息。

2.瀏覽目錄


 利用opendir函數(shù)返回的句柄配合scandir函數(shù)實(shí)現(xiàn)瀏覽操作。
  array scandir(string directory[,int sorting_ordering[,resource context]]);//用于瀏覽指定路徑下的目錄和文件。如果成功則返回包含文件名的array,否則返回false。directory指定要瀏覽的目錄,如果不是目錄,那麼將返回false,并且產(chǎn)生一個(gè)E_WARNING級(jí)別的錯(cuò)誤信息。sorting_order設(shè)置排列順序,默認(rèn)為字母升序排列。如果帶上該參數(shù),則變?yōu)榻敌蚺帕小?
備注:is_dir()函數(shù),判斷指定文件名是否一個(gè)目錄。如果文件名存在且為目錄,則返回true,否則返回false。如果是相對(duì)目錄,則按照當(dāng)前工作目錄檢查其相對(duì)路徑。

3.關(guān)閉目錄。

  void closedir(resource handle);//handle,要關(guān)閉的工作目錄的句柄。

備注:前面已經(jīng)了解到,若打開(kāi)的目錄不存在,系統(tǒng)并不會(huì)幫我們創(chuàng)建目錄。那麼我們可以自行創(chuàng)建想要的目錄??梢詰?yīng)用以下函數(shù):
    mkdir()函數(shù):新建一個(gè)目錄,成功則返回true,否則false。
    rmdir()函數(shù):刪除目錄。目錄必須為空(目錄中無(wú)文件或者子目錄),且要有操作的權(quán)限。
    unlink()函數(shù):刪除文件,成功則返回true,失敗返回false。

文件上傳、下載原理 
       
步驟內(nèi)容:
  步驟1:控制上傳文件,通過(guò)php.ini文件配置。
  步驟2:對(duì)上傳文件進(jìn)行判斷。上傳文件的大小,格式等。
  步驟3:執(zhí)行上傳文件的操作方法。

1.控制上傳文件:

  php通過(guò)對(duì)php.ini對(duì)上傳文件進(jìn)行控制,包括:是否支持上傳、上傳文件的臨時(shí)目錄、上傳文件的大小、指令執(zhí)行的時(shí)間與指令分配的內(nèi)存空間。
    在php.ini文件中定位到file uploads選項(xiàng),完成對(duì)上述選項(xiàng)的設(shè)置。選項(xiàng)含義如下:
    file_uploads:如果是on,說(shuō)明服務(wù)器支持文件上傳,如果為off,則不支持。一般默認(rèn)是支持的,此選項(xiàng)不必修改。
    upload_tem_dir:上傳文件的臨時(shí)目錄。在文件上傳成功之前,文件首先保存在服務(wù)器的臨時(shí)目錄中。多數(shù)使用系統(tǒng)默認(rèn)目錄,但是也可以自行設(shè)置。
    upload_max_filesize:服務(wù)器允許上傳文件的最大值,以MB為單位。系統(tǒng)默認(rèn)為2MB,若超過(guò)則須修改其值。
    max_execution_time:php中一個(gè)指令所能執(zhí)行的最長(zhǎng)時(shí)間,單位是秒。該指令在執(zhí)行上傳超大文件時(shí)必須修改,否則及時(shí)上傳文件在服務(wù)器允許的范圍內(nèi),但是超過(guò)指令所能執(zhí)行的最長(zhǎng)時(shí)間,仍然無(wú)法實(shí)現(xiàn)上傳。
    memory_limit:php中一個(gè)指令所分配的內(nèi)存空間,單位時(shí)MB。它的大小同樣會(huì)影響到超大文件的上傳。

備注:在客戶(hù)端中控制上傳文件應(yīng)用的時(shí)form表單中的enctype和method屬性,以及隱藏域MAX_FILE_SIZE.
    enctype="multipart/form-data":指定表單編碼數(shù)據(jù)方式。
    method="post":指定數(shù)據(jù)傳輸?shù)姆绞健?
    <input type="hiden" name="MAX_FILE_SIZE" value="1000"/>:通過(guò)隱藏域控制上傳文件的大小,單位為字節(jié)。該值不能超過(guò)php.ini配置文件中的upload_max_filesize選項(xiàng)設(shè)置的值。它不能完全控制上傳文件的大小,只能避免一些不必要的麻煩。

2.判斷上傳文件

  對(duì)上傳文件進(jìn)行判斷應(yīng)用的是全局變量$_FILES,$_FILES是一個(gè)數(shù)組,它包含所有上傳文件的信息。數(shù)組中各個(gè)元素含義如下:
    $_FILES[filename][name]:存儲(chǔ)上傳文件的文件名,如text.txt,title.jpg等。
    $_FILES[filename][size]:存儲(chǔ)文件的大小,單位為字節(jié)。
    $_FILES[filename][tem_name]:存儲(chǔ)文件在臨時(shí)目錄中使用的文件名,因?yàn)槲募谏蟼鲿r(shí)首先要將其以臨時(shí)文件的身份存儲(chǔ)在臨時(shí)目錄中。
    $_FILES[filename][type]:存儲(chǔ)上傳文件的MIME類(lèi)型。MIME規(guī)定各種文件格式的類(lèi)型,每種MIME類(lèi)型都時(shí)由“/”分隔的主類(lèi)型和子類(lèi)型組成。例如:"image/gif"的主類(lèi)型為圖像,子類(lèi)型為GIF格式的文件。"text/html"代表文本的HTML文件。
    $_FILES[filename][error]:存儲(chǔ)文件上傳的錯(cuò)誤代碼:此項(xiàng)目為PHP4.2.0版本中新增內(nèi)容。它的返回值由5種:
      0:表示沒(méi)有任何錯(cuò)誤。文件上傳成功。
      1:表示上傳文件的大小超出配置文件指令upload_max_filesize選項(xiàng)的限定值。
      2:表示上傳文件的大小超出HTML表單中max_file_size選項(xiàng)所指定的值。
      3:表示文件只被上傳了一部分。
      4:表示沒(méi)有上傳任何文件。
例子:
復(fù)制代碼 代碼如下:

<?php
/*判斷是否由上傳圖片*/
if(!empty($_FILES['up_picture'][name])){
/*將圖片信息賦值給變量*/
$type=strtolower(strstr($_FILES['up_picture'][name],"."));
if($type != '.jpg' && $type != '.gif') echo "你上傳的文件格式不對(duì)";
else{
if($_FILES['up_picture'][size]<2000000 && $_FILES['up_picture'][size]>0){
echo "上傳文件名稱(chēng):".$_FILES['up_picture'][name]."<br/>";
echo "上傳文件類(lèi)型:".$type."<br/>";
echo "上傳文件大?。?.$_FILES['up_picture'][size]."<br/>";
}else echo "圖片大小不符合要求。";
}
}
?>


3.文件上傳。

  php中應(yīng)用move_uploaded_file()函數(shù)實(shí)現(xiàn)文件上傳。但在執(zhí)行之前,為了防止?jié)撛诘墓魧?duì)原本不能通過(guò)腳本交互的文件進(jìn)行非法管理,可以先應(yīng)用is_uploaded_file()函數(shù)判斷指定的文件是否通過(guò)HTTP POST上傳的,如果是則返回true。通過(guò)該函數(shù),可以確保惡意的用戶(hù)無(wú)法欺騙腳本去訪問(wèn)不能訪問(wèn)的文件。
   bool is_uploaded_file(string name);//用于判斷指定的文件是否通過(guò)HTTP POST上傳的。filename必須類(lèi)似于$_FILES[‘filename'][‘temp_name']的變量,不可以使用從客戶(hù)端上傳的文件名$_FILES[‘filename'][‘name']。

   move_upload_file(string filename,string destination);//該函數(shù)用于將文件上傳到服務(wù)器中指定的位置。如果成功,則返回true,否則返回false。filename指定上傳文件的臨時(shí)文件名,即$_FILES['tmp_name'],參數(shù)destination指定文件上傳后保存的新路徑和名稱(chēng)。如果參數(shù)不是合法的上傳文件,不會(huì)出現(xiàn)任何操作,該函數(shù)將返回false。如果是合法的上傳操作,但是由于某些原因無(wú)法移動(dòng),則不會(huì)出現(xiàn)任何操作,返回false的同時(shí)將會(huì)發(fā)出一條警告。
復(fù)制代碼 代碼如下:

<?php
if( !empty($_FILES[ 'up_picture' ][ 'name' ])){
if( $_FILES['up_picture']['error'] > 0){
echo "上傳錯(cuò)誤!";
switch($_FILES['up_picture']['error']){
case 1:
echo "上傳文件超出配置文件規(guī)定值";
break;
case 2:
echo "上傳文件超出表單規(guī)定值";
break;
case 3:
echo "上傳文件不全";
break;
case 4:
echo "沒(méi)有上傳文件";
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.文件下載

這裡介紹通過(guò)http方式下載文件,主要用到header()函數(shù)。header()函數(shù)屬于HTTP函數(shù),其作用是以HTTP將HTML文檔的表頭送到瀏覽器,并告訴瀏覽器具體怎麼處理這個(gè)頁(yè)面。
void header(string string[,bool replace[,int http_respone_code]]);//參數(shù)string 指定發(fā)送的標(biāo)頭。參數(shù)replace控制如果一次發(fā)送多個(gè)標(biāo)頭,對(duì)于相似的標(biāo)頭是替換還是添加。如果是false,則強(qiáng)制發(fā)送多個(gè)同類(lèi)型的標(biāo)頭,默認(rèn)為true。參數(shù)http_respone_code強(qiáng)制將HTTP響應(yīng)代碼設(shè)置為指定值:
下載步驟如下:
    a):通過(guò)"Content-Type" 指定文件的MIME類(lèi)型。
    b):通過(guò)"Content-Disposition" 對(duì)文件進(jìn)行描述,值"attachment;filename="test.jpg"" 說(shuō)明是一個(gè)福建,同時(shí)指定下載文件的名稱(chēng)。
    c):通過(guò)"Content-Length" 設(shè)置下載文件的大小。
d):通過(guò)readfile()函數(shù)讀取文件內(nèi)容。
例如:
復(fù)制代碼 代碼如下:

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


5.訪問(wèn)遠(yuǎn)程文件

  步驟1:配置 php.ini 文件選項(xiàng) allow_url_fopen設(shè)置為on。參數(shù)默認(rèn)是開(kāi)啓的,允許打開(kāi)http和ftp指定的遠(yuǎn)程文件。如果 allow_url_fopen設(shè)置為off,則不允許打開(kāi)遠(yuǎn)程文件。
  步驟2:使用fopen()函數(shù)讀取文件內(nèi)容。根據(jù)內(nèi)容創(chuàng)建你想要的資源,保存到本地。
        
ps:更多php.ini配置文件中的文件操作 和 目錄操作的擴(kuò)展方法請(qǐng)參考官方php指南。

相關(guān)文章

最新評(píng)論