主要内容:
- 打開和關閉檔案
- 檔案類型
- 檔案處理
- 目錄處理
- 通路遠端檔案
- 檔案鎖定
- 檔案上傳
資料除了可以存儲在資料庫中,我們主要的還是存儲在檔案中,而且存儲在檔案中更加的友善直接。
- 打開fopen($filepath,$mode)
- 關閉fclose($file)
注意,我的test.txt檔案和demo.php在同一個目錄下

demo.php
<?php
//打開檔案r隻讀,r+讀寫,打開成功傳回true,否則false
$file=fopen("C:/xampp/htdocs/test.txt","r");//絕對路徑
if($file){
echo "檔案test.txt打開了<br/>";
}else{
echo "檔案test.txt打開失敗檔案打開了<br/>";
}
$file2=fopen("./test.txt","r");//相對路徑
if($file2){
echo "檔案test.txt打開了<br/>";
}else{
echo "檔案test.txt打開失敗<br/>";
}
if(fclose($file)){
echo "檔案test.txt成功關閉<br/>";
}
if(fclose($file2)){
echo "檔案test.txt成功關閉<br/>";
}
?>
輸出
檔案test.txt打開了
檔案test.txt打開了
檔案test.txt成功關閉
檔案test.txt成功關閉
無論是txt檔案還是jpg檔案,還是doc檔案,都屬于同一種檔案類型,file
檔案夾是另外一種檔案類型,dir
檔案類型:
- file普通檔案
- dir目錄類型
- char字元串裝置,鍵盤,列印機
- block塊裝置,某個磁盤分區
- link快捷方式,指針的指針
- fifo管道,用于把一個程序傳到另外一個程序
- unknow未知檔案
使用filetype($filename)判斷檔案的類型,傳回字元串
stat($filename)可以輸出檔案的大部分屬性
stat.php
<?php
print_r(stat("./test.txt"));
?>
Array ( [0] => 2 [1] => 0 [2] => 33206 [3] => 1 [4] => 0 [5] => 0 [6] => 2 [7] => 12 [8] => 1533566405 [9] => 1533566414 [10] => 1533566405 [11] => -1 [12] => -1 [dev] => 2 [ino] => 0 [mode] => 33206 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 2 [size] => 12 [atime] => 1533566405 [mtime] => 1533566414 [ctime] => 1533566405 [blksize] => -1 [blocks] => -1 )
readfile($filename)讀取檔案内容寫入輸出緩沖,并傳回檔案字元串大小,報錯傳回false
fgets($filename)從檔案指針讀取一行,出錯傳回false
fgetc($filename)從檔案指針讀取一個字元,出錯傳回false
readfile.php
<?php
readfile("./test.txt");
?>
test.txt
輸出
這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試
fwrite($filename,$date)向檔案中寫入資訊
fwrite.php
<?php
//使用@隐藏提示資訊,@叫做錯誤控制運算符
$file=@fopen("./test.txt","r+");
echo $file."<br/>";
$num=fwrite($file,"今天是個好日子,心想的事兒都能成");
if($num){
echo "寫入成功,寫入了$num 字元";
}else{
echo "寫入失敗";
}
?>
Resource id #3
寫入成功,寫入了48 字元
但是使用r+模式,會覆寫原先的内容,如果不想覆寫原先的内容,而是在原先基礎上增加内容,應該使用追加模式,這裡不研究。
常用方法:
- copy($source,$dest)複制檔案到指定路徑
- rename($oldname,$newname)重命名檔案
- unlink($filename)删除檔案
- pathinfo($path,$options)傳回檔案的路徑資訊
- realpath($path)傳回檔案的絕對路徑
- is_file($filename)判斷是否是檔案
目錄是一種特殊的檔案類型
判斷是否是目錄isdir($path)
打開目錄opendir($path)
關閉目錄closedir($path)
dir.php
<?php
$path="D:\資料";
if(is_dir($path)){
//打開目錄
$dir=opendir($path);
echo "檔案打開成功<br/>";
}else{
echo "打開失敗,程式退出<br/>";
exit();
}
closedir($dir);
?>
檔案打開成功
操作目錄方法:
readdir($path)浏覽目錄,傳回一個檔案名
mkdir($pathname)建立目錄
rmdir($pathname)删除目錄
chdir($pathname)改變目錄
dir_operate.php
<?php
if(chdir("D:/")){
echo "切換到D:/<br/>";
}//成功傳回1
if(mkdir("D:/test")){
echo "建立檔案夾D:/test<br/>";
}//成功傳回1
if(rmdir("D:/test")){
echo "删除檔案夾D:/test<br/>";
}//成功傳回1
?>
切換到D:/
建立檔案夾D:/test
删除檔案夾D:/test
PHP支援URL格式的檔案調用,需要在php.ini中設定一下
url_file.php
<?php
$html=file_get_contents("http://www.baidu.com/");
echo $html;
?>
在向一個檔案寫入内容時,如果其他使用者也修改這個檔案,可能會造成沖突,為了防止沖突,使用flock()來鎖定檔案
flock.php
<?php
$file=fopen("C:/xampp/htdocs/test.txt","r+");
if(flock($file,LOCK_EX)){
echo "檔案已經鎖定,可以安全寫入資料";
}else{
echo "檔案未鎖定,寫入資料是不安全的";
}
fclose($file);
?>
檔案已經鎖定,可以安全寫入資料
首先需要配置php.ini檔案
單檔案上傳
使用move_upload_file($tmpname,$name)
upload.php
<html>
<form method="post" enctype="multipart/form-data">
<input type="file" name="upfile" />
<input type="submit" value="上傳" />
</form>
</html>
<?php
$file=fopen("C:/xampp/htdocs/test.txt","r+");
if(!empty($_FILES)){
foreach($_FILES["upfile"] as $k=>$v){
echo "$k=>$v<br/>";
}
}else{
echo "沒有上傳檔案";
}
?>
未上傳效果
上傳檔案
上傳成功
upload2.php
<html>
<form method="post" enctype="multipart/form-data">
<input type="file" name="upfile" />
<input type="submit" value="上傳" />
</form>
</html>
<?php
if(!empty($_FILES)){
$tmpname=$_FILES["upfile"]["tmp_name"];//檔案臨時名
$name=$_FILES["upfile"]["name"];//檔案原名
move_uploaded_file($tmpname,$name)or die("檔案上傳失敗,程式退出");
echo "檔案上傳成功";
}else{
echo "沒有上傳檔案";
}
?>
未上傳
上傳
檔案已經上傳到跟目錄
ok,檔案上傳先到這裡