close

 

PHP 學習紀錄(四):PHP文件包含、文件編程

一、PHP文件包含

1.文件包含

就是在一個運行的PHP腳本中,去將另外一個PHP腳本的代碼拿過來

並且可以使用被包含的文件裡的內容,或者將自己的內容提供給另外一個被包含的文件使用

(1)文件包含的語法

PHP提供四種文件包含的語法:include、include_once、require、require_once

用法皆相同:

  • include/include_once/require/require_once '文件所在路徑及文件名稱'
  • include/include_once/require/require_once('文件所在路徑及文件名稱') 

(2)文件包含的意義

文件包含的目的有兩個:向上包含、向下包含

向上包含:先包含某個文件,目的是為了使用某個文件中的代碼或數據

向下包含:先寫好代碼,後包含文件,目的是為了在被包含的文件中使用當前的數據

(3)文件包含的區別

include與require的區別:

文件不存在的時候,include只是報警告不影響執行,require卻會報致命錯誤並中斷代碼執行

沒_once與有_once的區別:

沒_once不管幾次都會執行包含操作,有_once 會記錄是否已經包含過該文件,對同一文件多次包含只操作一次

(4)文件包含原理

文件包含本質就是將被包含文件的所有代碼,再進行操作的那一行全部引入並運行

但文件包含是在運行時才會執行,因此不能先訪問文件內容後包含文件

PHP把聲明或定義放在最後也能使用,但文件包含例外 

2.路徑問題

指PHP在進行文件包含的時候,採用何種方式尋找文件的問題

通常分為兩種:相對路徑、絕對路徑

(1)絕對路徑

絕對路徑分為兩種:本地絕對路徑、互聯網絕對路徑

本地絕對路徑:從硬碟根目錄道文件的路徑 ex、C:\Windows

互聯網絕對路徑:www.taobao.com/index.php

(2)相對路徑

即被包含文件相對於當前文件所在的路徑,分為三種:

  • ./:表示同級目錄(當前所屬文件夾),每個文件夾下都有"."文件代表當前目錄,會自動匹配任意目錄下的.文件夾
  • ../:表示上級目錄,每個文件夾下都有".."文件代表上級目錄
  • 什麼都沒有: 表示同級目錄,只會從自身所在目錄開始(較安全)

相對路徑包含問題:

./ 和 ../ 會因為文件被包含之後發生改變(被不同文件夾包含,同文件夾不會改變)

(3)相對路徑與絕對路徑的區別

相對路徑效率高:相對路徑只要按照當前文件位置偏移尋找即可

相對路徑較不安全:相對路徑一旦嵌套,./ 當前目錄就會產生改變

絕對路徑效率低:因為一定要從根目錄開始尋找

絕對路徑較安全:不會因為嵌套而出現路徑變化 

 

二、PHP文件編程

1.文件編程認識

是指PHP代碼對廣義文件(文件夾、文件),進行增刪改查的操作

(1)文件編程的作用

根據用戶需求和業務來處理一些文件問題,例如目錄管理、文件操作,還有許多需透過文件來進行數據管理

(2)文件編程的分類

通常分為目錄操作、文件操作

2.文件夾操作

對某個目錄的文件夾進行增刪改查的操作

(1)新增文件夾操作

使用PHP中 mkdir('文件夾名字[,模式]')

※模式為Linux下的權限,在Windows下沒有意義

若文件夾已經存在,則在前方加上@錯誤抑制符

@mkdir('文件夾名字'),即可避免報錯

(2)刪除文件夾操作

使用系統自帶函數 rmdir('路徑名字')

可能會碰到文件夾不存在的情況,同樣使用錯誤抑制符@ 即可解決

刪除目錄須為 "空目錄",否則會刪除失敗返回FALSE

(3)修改文件夾操作

修改文件夾的名稱,即重命名

使用PHP提供的 rename('舊名稱','新名稱')

rename是針對所有文件,包含文件夾與文件本身

同樣碰到文件不存在的情況,使用錯誤抑制符@ 即可解決

(4)讀取文件夾操作

讀取文件夾中的所有內容(文件名稱),有兩種方式可以進行操作:

  • 使用系統函數scandir(路徑名稱)得到該文件夾下所有文件名稱
  • 手動操作opendir(路徑)得到資源,再使用readdir(資源)進行訪問,最後記得closedir(關閉資源)

 

(5)文件相關系統函數

文件夾操作通常具有不可知性,程序不知道文件夾是否存在、是否是文件夾等。

為了減少代碼出錯率,通常需要使用系統函數來判定路徑的有效性

  • is_dir(目錄):判斷是否是路徑,不是路徑返回false,是路徑返回true
  • getcwd():獲取當前工作路徑
  • rewinddir(目錄資源):將opendir打開的資源指針重新回到第一個
  • chdir(目錄) :修改當前工作路徑,即不用修改訪問文價的真實路徑,讓文件中可以得到新的工作路徑(當前文件不會移動)

 

3.文件夾操作

不僅要對文件進行增刪改查、也要對文件內容進行增刪改查

(1)新增文件

新增文件同常會伴隨著系統函數:fopen(文件名,操作模式)

來打開文件,並且得到文件資源

※關於模式操作 可以參考PHP手冊

最後要使用:fclose(資源)

來關閉文件,而為了避免沒有文件會產生錯誤,

可以在前面添加@錯誤抑制符:@fclose(資源)

(2)刪除文件

unlink(文件名稱),成功返回true、失敗返回false

而為了避免沒有文件會產生錯誤,

可以在前面添加@錯誤抑制符:@unlink(文件名稱)

(3)修改文件

fwrite(文件資源, 字符串內容 )

(4)讀取文件

fread(文件資源, 讀取長度 )

按照長度讀取資源,最多讀取一行

(5)判定資源是否結束

使用 feof() 函數,可以與 while 做搭配

(6)一次性全部讀取

使用 file_get_contents(文件路徑)

(7)一次性全部寫入

使用 file_put_contents(文件路徑,內容字符串[寫入方式])

(8)文件操作的相關常用函數

  • file(文件路徑):將整個文件以行單位讀取,返回一個數組
  • fgetc(文件資源):一次讀取一個字符
  • fgets(文件資源):一次讀取一行
  • file_exists(文件路徑):判定一個文件或著目錄是否存在
  • fseek(文件資源,指針位置):設定 fopen 打開的資源指針位置
  • fileatime(文件路徑):獲取文件最後訪問時間
  • filemtime(文件路徑):獲取文件最後修改時間
  • filesize(文件路徑) :獲取文件大小

4.遞歸算法

遞歸定義:在電腦科學中是指一種通過重複將問題分解為同類的子問題而解決問題的方法

(1)遞歸算法重要思想

要在函數內部調用自己容易造成無限調用

  • 遞歸點: 碰到的問題與當前函數解決的問題一樣
  • 遞歸出口: 就是函數調用要有盡頭,與什麼時候函數

(2)範例: Fibonacci 數列

用一個函數實現求得對應的 Fibonacci 數列對應值

  • 遞歸點: Fibonacci 數列值都是由兩個數列之和構成
  • 遞歸出口:Fibonacci 數列的第一個和第二個數都是1 

方法:

  • 寫一個函數結構:用來實現獲取 Fibonacci 數列的具體位置的值
  • 找到遞歸出口:就是函數什麼時候結束,就是當第一個和第二個數都是1的時候
  • 尋找規則:就是遞歸點,從第3個數開始,就是前兩個 Fibonacci 數列之和

(3)範例: 遍歷文件夾裡的所有文件(遞歸遍歷)

  1. 建立一個函數,遍歷輸出一個指定目錄下的所有文件
  2. 找到遞歸出口: 如果文件夾遍歷完沒有文件夾,自然運行結束
  3. 找到遞歸點:如果文件夾中的文件式一個文件夾,那麼調用自己
arrow
arrow
    全站熱搜

    ivankao 發表在 痞客邦 留言(0) 人氣()