1. 程式人生 > 實用技巧 >PHP 檔案操作

PHP 檔案操作

檔案操作

檔案型別

  • windows系統識別的檔案型別

    • file
    • dir
    • unknown
  • filetype() 判斷檔案型別

    • 檔案不存在,返回false
<?php
	$filename1= 'D:\Program Files\xampp\htdocs\index.php';
	$filename2= 'D:\Program Files\xampp\htdocs';
	$filename3= 'D:\Program Files\xampp\htdoc';
	var_dump(filetype($filename1));
	var_dump(filetype($filename2));
	var_dump(filetype($filename3));
?>
  • file_exists() 判斷檔案是否存在
    • 檔案存在,返回true
    • 檔案不存在,返回false
<?php
	$filename1= 'D:\Program Files\xampp\htdocs\index.php';
	$filename2= 'D:\Program Files\xampp\htdocs';
	$filename3= 'D:\Program Files\xampp\htdoc';
	var_dump(file_exists($filename1));
	var_dump(file_exists($filename2));
	var_dump(file_exists($filename3));
?>

檔案屬性

  • 獲取檔案屬性的函式
    • filesize 獲取檔案大小
    • filectime 獲取檔案的建立時間
    • filemtime 獲取檔案的修改時間
    • fileatime 獲取檔案的上次訪問時間
    • is_readable 判斷給定檔案是否可讀
    • is_writable 判斷給定檔案是否可寫
    • is_executable 判斷給定檔案是否可執行
    • is_file 判斷給定檔案是否為一個正常的檔案
    • is_dir 判斷給定檔案是否是一個目錄
    • stat 給出檔案的資訊
<?php
	$filename= 'D:\Program Files\xampp\htdocs\index.php';
	if(file_exists($filename)& is_file($filename)){
		echo "檔案大小為:".filesize($filename)."位元組!<br>";
		echo "檔案的建立時間為:".date('Y年m月d日', filectime($filename))."<br>";
		echo "檔案的修改時間為:".date('Y年m月d日', filemtime($filename))."<br>";
		echo "檔案的訪問時間為:".date('Y年m月d日', fileatime($filename))."<br>";
		echo is_readable($filename)? "該檔案可讀<br>": "該檔案不可讀<br>";
		echo is_writable($filename)? "該檔案可寫<br>": "該檔案不可寫<br>";
		echo is_executable($filename)? "該檔案可執行<br>": "該檔案不可執行<br>";
		echo "<pre>";
		print_r(stat($filename));
		echo "</pre>";
	}else{
		echo "該檔案不存在!";
	}
?>

檔案操作

開啟和關閉檔案

  • fopen() 開啟檔案
<?php
	$downURL= 'http://rrh2.ufile.ucloud.com.cn/iXiaoma.rar';
	$file1= fopen('D:\Program Files\xampp\htdocs\login.html', 'r');
	$file2= fopen('D:\Program Files\xampp\htdocs\login.html', 'w');
	$file3= fopen($downURL, 'r');
	$file4= fopen('ftp://user:[email protected]/index.html', 'w');
	echo "{$file1}<br>";
	echo "{$file2}<br>";
	echo "{$file3}<br>";
	echo "{$file4}<br>";
?>
  • fclose() 關閉檔案
    • 成功返回 true
    • 失敗返回 false
<?php
	$file= fopen('D:\Program Files\xampp\htdocs\login.html', 'r');
	echo "檔案開啟成功!<br>".$file."<br>";
	if(fclose($file)){
		echo "檔案關閉成功!";
	}
?>

讀取檔案

  • fread() 用於在開啟檔案時讀取指定長度的字串
<?php
	$filename= 'D:\Program Files\xampp\htdocs\error_log.txt';
	$file= fopen($filename, 'r');
	$content= fread($file, 33);
	echo "檔案讀取:{$content}<br>";
	if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
	# 讀取全文
	$file= fopen($filename, 'r');
	$contentAll= fread($file, filesize($filename));
  echo "檔案讀取:{$contentAll}<br>";
  if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
?>
  • fgetc() 用於在開啟的檔案中讀取一個字元
<?php
	$filename= 'D:\Program Files\xampp\htdocs\error_log.txt';
	$file= fopen($filename, 'r');
	$content= fgetc($file);
	echo "檔案讀取:{$content}<br>";
	if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
?>
  • fgets() 用於在開啟的檔案中讀取一行
<?php
	$filename= 'D:\Program Files\xampp\htdocs\error_log.txt';
	$file= fopen($filename, 'r');
	$content= fgets($file);
	echo "檔案讀取:{$content}<br>";
	if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
?>
  • file_get_contents() 用於將檔案的內容全部讀取到一個字串中
<?php
	$filename= 'D:\Program Files\xampp\htdocs\error_log.txt';
	$content= file_get_contents($filename);
	echo "檔案讀取:{$content}<br>";
?>
  • readfile() 用於將檔案的內容全部輸出到終端
<?php
	$filename= 'D:\Program Files\xampp\htdocs\error_log.txt';
	readfile($filename);
?>
  • file() 將整個檔案讀入到陣列中
<?php
	$filename= 'D:\Program Files\xampp\htdocs\error_log.txt';
	$content= file($filename);
	foreach($content as $key=>$value){
		echo "{$key} : {$value}<br>";
	}
?>

寫入檔案

  • fwrite() 用於寫入檔案
    • fopen($filename, 'w') 只寫模式,檔案清空重寫
    • fopen($filename, 'a') 追加模式,檔案追加續寫
<?php
	$filename= 'D:\Program Files\xampp\htdocs\sunny_log.txt';
	$content= "塔萌萌\r\n";
	$file= fopen($filename, 'a');
	echo "檔案開啟成功!<br>";
	fwrite($file, $content);
	if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
?>
  • file_put_contents() 用於對檔案進行寫操作
    • 不需要開啟檔案
    • 預設,檔案清空重寫
<?php
	$filename= 'D:\Program Files\xampp\htdocs\sunny_log.txt';
	$content= "塔萌萌啊\r\n";
	file_put_contents($filename, $content, FILE_APPEND);
	echo '檔案寫入成功';
?>

檔案加鎖機制

  • flock() 實現檔案加鎖機制
    • LOCK_SH 取得共享鎖定(讀檔案時使用)
    • LOCK_EX 取得獨佔鎖定(寫檔案時使用)
    • LOCK_UN 釋放鎖定(無論共享與獨佔,都用它釋放)
    • LOCK_NB 如果不希望 flock() 在鎖定時堵塞,則給operation加上LOCK_NB
<?php
	$filename= 'D:\Program Files\xampp\htdocs\sunny_log.txt';
	$content= "塔萌萌啊\r\n";
	$file= fopen($filename, 'w+');
	if(flock($file, LOCK_EX)){
		fwrite($file, $content);
		flock($file, LOCK_UN);
	}else{
		echo "檔案不能被鎖定!";
	}
	if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
?>

二進位制讀取

  • fread() 實現二進位制讀取
    • 檔案的儲存有兩種:字元流和二進位制流
    • 二進位制流的讀取按檔案大小來讀的
<?php
	$path= 'D:\Program Files\xampp\htdocs\pig.jpg';
	$file= fopen($path, 'r');
	header('content-type:image/jpeg');
	echo fread($file, filesize($path));
	if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
?>
  • file_get_contents() 實現二進位制讀取
<?php
	$path= 'D:\Program Files\xampp\htdocs\pig.jpg';
	header('content-type:image/jpeg');
	echo file_get_contents($path);
?>

複製檔案

  • copy() 用於實現拷貝檔案的功能
<?php
	$path= 'D:\Program Files\xampp\htdocs\pig.jpg';
	$newPath= 'D:\Program Files\xampp\htdocs\img\pig.jpg';
	if(copy($path, $newPath)){
		echo '拷貝成功';
	}else{
		echo '拷貝失敗';
	}
?>

重新命名檔案

  • rename() 用於實現檔案或目錄的重新命名功能
<?php
	$name= 'D:\Program Files\xampp\htdocs\pig.jpg';
	$newName= 'D:\Program Files\xampp\htdocs\piger.png';
	$newPath= 'D:\Program Files\xampp\htdocs\img\pigger.jpg';
	rename($name, $newName);
	echo '檔案重新命名成功'."<br>";
	rename($newName, $newPath);
	echo '檔案重新命名並指定新位置'."<br>";
?>

刪除檔案

  • unlink() 其作用是刪除檔案
<?php
	$path= 'D:\Program Files\xampp\htdocs\jerry.txt';
	$file= fopen($path, 'a');
	fwrite($file, "蝸萌\n");
	if(fclose($file)){
		echo "檔案關閉成功!<br>";
	}
	if(unlink($path)){
		echo "檔案刪除成功!<br>";
	}
?>

目錄操作

解析目錄

  • basename() 用於返回路徑中的檔名
<?php
	$path= 'D:\Program Files\xampp\htdocs\sunny.txt';
	$file1= basename($path);
	echo $file1."<br>";
	$file2= basename($path, '.txt');
	echo $file2."<br>";
?>
  • dirname() 用於返回路徑中的目錄部分
<?php
	$path= 'D:\Program Files\xampp\htdocs\sunny.txt';
	echo dirname($path);
?>
  • pathinfo() 用於以陣列的形式返回路徑的資訊
<?php
	$path= 'D:\Program Files\xampp\htdocs\sunny.txt';
	echo '<pre>';
	print_r(pathinfo($path));
	echo '</pre>';
?>

遍歷目錄

  • opendir() 用於開啟一個目錄控制代碼
<?php
	$dir= 'D:\Program Files\xampp\htdocs';
	echo opendir($dir);
?>
  • closedir() 用於關閉目錄控制代碼

    • 沒有返回值
  • readdir() 用於從目錄控制代碼中讀取條目

<?php
	$dir= 'D:\Program Files\xampp\htdocs\img';
	if(is_dir($dir)){
		if($dh= opendir($dir)){
			while(($file= readdir($dh))!== false){
				echo "filename:".$file."<br>";
			}
			closedir($dh);
			echo "目錄關閉成功!";
		}
	}
?>
  • rewindir() 用於倒回目錄控制代碼

建立和刪除目錄

  • mkdir() 用於新建目錄