麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

PHP文件處理方法詳解

2020-03-22 20:19:31
字體:
來源:轉載
供稿:網友
  • PHP文件系統詳解,包括打開文件,讀取目錄,上傳下載等文件處理函數

    一、文件操作

    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:rn 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。如果是相對目錄,則按照當前工作目錄檢查其相對路徑。www.it165.net

    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":指定數據傳輸的方式。
    <input type="hiden" name="MAX_FILE_SIZE" value="1000"/>:通過隱藏域控制上傳文件的大小,單位為字節。該值不能超過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的同時將會發出一條警告。
    代碼如下:


    <?phpif( !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指南。


    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 国产精品视频中文字幕 | 亚州精品天堂中文字幕 | 免费a视频在线观看 | 国产亚洲在 | 精品国产乱码久久久久久久久 | 国产91成人 | 成人激情视频网 | 成人毛片100免费观看 | 中文区永久区 | 亚洲精品一区二区三区大胸 | 综合网天天射 | 欧美精品免费一区二区三区 | 日本大片在线播放 | 国产成人羞羞视频在线 | 色网站免费观看 | 可以免费看的av | 精品国产一区二区亚洲人成毛片 | 日操操夜操操 | 久久99国产综合精品 | 香蕉久草视频 | 亚洲国产精品久久久 | 久久精品日产高清版的功能介绍 | 热99精品视频 | 成人免费看片a | 欧美精品激情视频 | 综合网日日天干夜夜久久 | 色啪综合| 国产精品久久二区 | 国产精品刺激对白麻豆99 | 日日摸夜夜添夜夜添牛牛 | 欧日韩在线视频 | 午夜网站视频 | 91成人久久 | 亚洲爱爱图 | 国产精品麻豆一区二区三区 | 99r国产精品 | 日韩毛片免费观看 | 亚洲午夜在线观看 | 国产亚洲精品综合一区 | 成年人视频在线免费播放 | 热99在线视频 |