天天看點

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

主要内容:

  1. 打開和關閉檔案
  2. 檔案類型
  3. 檔案處理
  4. 目錄處理
  5. 通路遠端檔案
  6. 檔案鎖定
  7. 檔案上傳

資料除了可以存儲在資料庫中,我們主要的還是存儲在檔案中,而且存儲在檔案中更加的友善直接。

  • 打開fopen($filepath,$mode)
  • 關閉fclose($file)

注意,我的test.txt檔案和demo.php在同一個目錄下

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

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

檔案類型:

  1. file普通檔案
  2. dir目錄類型
  3. char字元串裝置,鍵盤,列印機
  4. block塊裝置,某個磁盤分區
  5. link快捷方式,指針的指針
  6. fifo管道,用于把一個程序傳到另外一個程序
  7. 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

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

輸出

這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試 這是一個測試這是一個測試
      

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 字元
      
PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

但是使用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中設定一下

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

url_file.php

<?php
	$html=file_get_contents("http://www.baidu.com/");
	echo $html;
?>
      
PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

在向一個檔案寫入内容時,如果其他使用者也修改這個檔案,可能會造成沖突,為了防止沖突,使用flock()來鎖定檔案

flock.php

<?php
	$file=fopen("C:/xampp/htdocs/test.txt","r+");
	if(flock($file,LOCK_EX)){
		echo "檔案已經鎖定,可以安全寫入資料";
	}else{
		echo "檔案未鎖定,寫入資料是不安全的";
	}
	fclose($file);
?>
      
檔案已經鎖定,可以安全寫入資料
      

首先需要配置php.ini檔案

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

單檔案上傳

使用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 "沒有上傳檔案";
	}
?>
      

未上傳效果

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

上傳檔案

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

上傳成功

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

 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 "沒有上傳檔案";
	}
?>
      

  未上傳

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

上傳

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳
PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

檔案已經上傳到跟目錄

PHP學習7——檔案系統打開和關閉檔案檔案類型檔案處理目錄處理通路遠端檔案檔案鎖定檔案上傳

ok,檔案上傳先到這裡