標籤:php檔案系統
一、PHP系統檔案處理
/* PHP檔案系統處理 *所有檔案處理都是使用系統函數完成的。 *是基於Linux/Unix系統為模型 * * 檔案系統處理的作用: * 1. 所有的項目離不開檔案處理 * 2. 可以用檔案長時間儲存資料 * 3. 建立緩衝, 伺服器中檔案操作 * * 檔案處理 *1. 檔案類型 *以Linux為模型的, 在Windows只能擷取file, dir或unknow 三種類型 *在Linux/Unix下, block, char, dir, fifo, file, link, unknown和種型 *block :塊設定檔案,磁碟分割,軟碟機, cd-rom等 *char: 字元裝置,I/O 以字元為單位, 鍵盤,印表機等 *dir: 目錄也是檔案的一種 *fifo: *file: *link: *unknown * * filetype("目錄或檔案名稱") * * is_array(); * is_int(); * is_string(); * is_null; * is_bool(); * is_dir -- 判斷給定檔案名稱是否是一個目錄is_executable -- 判斷給定檔案名稱是否可執行is_file -- 判斷給定檔案名稱是否為一個正常的檔案is_link -- 判斷給定檔案名稱是否為一個符號串連is_readable -- 判斷給定檔案名稱是否可讀is_uploaded_file -- 判斷檔案是否是通過 HTTP POST 上傳的is_writable -- 判斷給定的檔案名稱是否可寫is_writeable -- is_writable() 的別名 * * *2. 檔案的屬性 *file_exists(); *filesize(); *is_readable(); *is_writeable(); *filectime(); *filemtime(); *fileactime(); *stat(); * *3. 和檔案路徑相關的函數 * *相對路徑:相對於目前的目錄的上級和下級目錄 *. 目前的目錄 *.. 上一級目錄 * *./php/apache/index.php *php/apahce/index.php *login.php *./login.php *../images/tpl/logo.gif * * *路徑分隔字元號 *linux/Unix "/" *windows "\" * *DIRECTORY_SEPARATOR 為不同平台,在Windows \ Linux / * *不管是什麼作業系統PHP的目錄分割符號都支技 / (Linux) * *在PHP和Apache設定檔中如果需要指定目錄,也使用/作為目錄符號 * *絕對路徑: */ 根路徑 * */images/index.php * *指的作業系統的根 *指的是存放網站的主目錄 * * 分情況 * * 如果是在伺服器中執行(通過PHP檔案處理函數執行)路徑 則 “根”指的就是作業系統的根 *如果程式是下載的用戶端,再訪問伺服器中的檔案時,只有通過Apache訪問,“根”也就指的是主目錄 * *http://www.xsphp.com/logo.gif * * *basename(url) *dirname(url) *pathinfo(url) * * * * *4. 檔案的操作(建立檔案,刪除檔案,移動檔案) *5. 檔案的開啟與關閉(讀檔案中的內容, 向檔案中寫內容) *6. 檔案內部移動指標 *7. 檔案的鎖定一些機制處理 * * * 目錄的處理 * 1. 目錄的遍曆 * 2. 目錄的建立 * 3. 目錄的刪除 * 4. 目錄的複製 *5. 統計目錄大小 * * * 檔案上傳和下載 * 1. 上傳 * 2. 下載 * * */
二、PHP檔案屬性函數執行個體
date_default_timezone_set("PRC");function getFilePro($fileName){if(!file_exists($fileName)){echo "檔案或目錄{$fileName} 不存在<br>";return;}else{echo "檔案的類型".filetype($fileName)."<br>";}if(is_file($fileName)){echo "這是一個檔案<br>";echo "檔案的大小為".getFileSize(filesize($fileName))."<br>";}if(is_dir($fileName)){echo "這是一個目錄<br>";}if(is_readable($fileName)){echo "這個檔案可以讀<br>";}if(is_writable($fileName)){echo "這個檔案可以寫<br>";}if(is_executable($fileName)){echo "這個檔案可以執行<br>";}echo "檔案的建立時間:".date("Y-m-d H:i:s",filectime($fileName))."<br>";echo "檔案的修改時間:".date("Y-m-d H:i:s",filemtime($fileName))."<br>";echo "檔案的最後訪問時間:".date("Y-m-d H:i:s",fileatime($fileName))."<br>";}function getFileSize($size){$dw="Byte";if($size >= pow(2, 40)){$size=round($size/pow(2, 40), 2);$dw="TB";}else if($size >= pow(2, 30)){$size=round($size/pow(2, 30), 2);$dw="GB";}else if($size >= pow(2, 20)){$size=round($size/pow(2, 20), 2);$dw="MB";}else if($size >= pow(2, 10)){$size=round($size/pow(2, 10), 2);$dw="KB";}else {$dw="Bytes";}return $size.$dw;}getFilePro("demo.txt");getFilePro("hello");
三、PHP擷取檔案狀態函數
date_default_timezone_set("PRC");echo ‘<pre>‘;print_r(stat("demo.txt"));echo ‘</pre>‘;
四、使用檔案系統快取資料方案
$cache=5; //緩衝時間$cachefile="cache.txt"; //緩衝的檔案if(file_exists($cachefile) && (time()-$cache) < filemtime($cachefile)) { echo file_get_contents($cachefile); //如果在緩衝的10秒內,就從快取檔案中擷取資料}else{file_put_contents($cachefile, date("Y-m-d H:i:s", time()));}
五、檔案路徑相關函數執行個體
$url1="./aaa/bbb/index.php";echo basename($url1)."<br>"; //檔案名稱echo dirname(dirname($url1))."<br>"; //父級目錄echo dirname($url1)."<br>"; //檔案目錄echo ‘<pre>‘; //檔案路徑資訊 print_r($path=pathinfo($url3)); echo ‘</pre>‘; echo $path["extension"];
六、檔案系統許可權相關的函數執行個體
建立檔案 touch("檔案名稱") 刪除檔案 unlink("檔案路徑"); 移動檔案 為檔案重新命名 rename("當前檔案路徑", “目錄為檔案路徑”) 複製檔案 copy("當前", “目標”); 一定要有PHP執行這個檔案許可權, Apache, 一個使用者 和許可權設計有關的函數 ls -l 或 ll _rwxrwxrwx 777 _ 類型 _檔案 d 表示是目錄 l b rwx 表這個檔案的擁有者 r讀 w寫 x執行 rwx 表這個檔案的擁有者所在的組 r讀 w寫 x執行 rwx 其它使用者對這個為檔案的許可權 r讀 w寫 x執行r 4w 2x 1 7 7 7 4+2+1 4+2+1 4+2+1rwx rwx rwx6444+2 4 4rw_ r__ r__754 chmod u=rwx,g=rw,o=x chmod 777 demo.php chmod 644 demo.html chown mysql demo.php chgrp apache demo.php chgrp -- 改變檔案所屬的組 chmod -- 改變檔案模式 chown -- 改變檔案的所有者 filegroup -- 取得檔案的組 fileowner -- 取得檔案的所有者