核心編程筆記 文件 目錄 HTTP協議 數據採集(curl)

文件操作

PHP也提供了一套文件操作系統函數。通過這套函數進行文件管理,創建文件、刪除、改名、存儲數據,讀取數據。

文件的理解:在文件管理系統文件分爲兩種

其一就是文件,用於存儲數據

其二是文件夾,用於存儲文件的文件

1. 文件相關信息

函數 說明 備註
file_exists(filename); 用於判斷一個文件是否存在 filename是一個表示文件的完整名的一個字符串
filemtime($filename); 用於獲取文件修改的時間 獲得時間戳,用date()轉換爲具體時間
filesize($filename); 用於獲取文件的大小 單位爲字節
basename(path); 用於獲取文件名
realpath(path); 用於判斷path是否是真實存在的一個路徑 如果不是返回的是布爾false。如果是那麼會將‘/’轉換爲‘\’,並將相對路徑轉換爲絕對路徑

2. 打開文件fopen()

fopen(filename,code); 用於打開一個文件,用於之後的對文件內容的讀寫操作
filename 是一個表示文件的完整名的一個字符串
mode 表示打開的方式
mode取值 打開文件方式 說明
r 文件不存在則報錯
r+ 讀寫 文件不存在則報錯
w 文件不存在則創建文件,如果文件存在則清空文件
w+ 讀寫 文件不存在則創建文件,如果文件存在則清空文件
a 追加 文件不存在則創建文件,如果文件存在並不會清空文件
a+ 追加及讀 文件不存在則創建文件,如果文件存在並不會清空文件

如果以r、r+打開的文件,那麼文件指針位於頭部

如果以a、a+打開的文件,那麼文件指針位於尾部

如果打開成功返回的是一個資源類型:

$filename="./data.txt";
$return=fopen($filename,'r');
var_dump($return);//返回:resource(3, stream)

3. 關閉文件

fclose(handle);

    handle是fopen()函數返回的資源

    用於判斷handle所指向的文件

$filename="./data.txt";
$return=fopen($filename,'r');
fclose($return);
var_dump($return);//返回resource(3, Unknown)

4. 寫入文件fwrite()

fwrite(handle,data) -
handle fopen()函數返回的資源
data 所要寫的數據
如果寫入成功則返回寫入字節數
如果寫入失敗則返回0

file_put_contents(filename,data);

用於向文件中寫入數據,特點是文件不需要打開,如果文件存在則清空文件內容

5. 讀取文件內容

函數 說明
fgetc(handle); 每次從handle所代表的文件中讀取一個字符,文件的指針會下移一行
fgets(handle,len); len表示讀取的字節個數-1,默認是1024
當遇到換行回車時就結束讀取
fread(handle,len); len表示讀取的字節個數,不可以省略
當遇到換行回車時,不受影響
file(filename); 將文件中的每一行讀取的一個元素,並返還整個數組
readfile(filename); filename用於表示文件的字符串
將讀取到的內容自動放到輸出緩存(直接輸出,不需要echo)
file_get_contents(filename); 一次性將所有文件讀取出來

file()示例:

==圖片1==

6. 拷貝文件

copy(source,dest); 用於複製一個文件,複製文件時可以改名
source 源文件
dest 目錄文件

7. 刪除文件

unlink(filename); 用於刪除文件

8. 文件的判斷

is_file(filename); 主要用於區分文件還是文件夾(文件是否存在)

9. 文件指針(瞭解)

函數 說明
ftell(handle); 用於獲取文件的指針位置
fseek(handle,n,【whence】); 用於移動文件的指針位置
注: -
handle 是fopen函數的返回值,代表實際的文件
n 偏移量
whence 移動的相對位置,取值:
SEEK_SET 相對於文件頭
SEEK_END 相對於文件尾
SEEK_CUR 相對於當前位置
/打開文件
$filename="./data.txt";
$handle=fopen($filename,'r');

//移動文件指針
$return=fseek($handle,-3,SEEK_END);
echo fgetc($handle);

10. 文件鎖(瞭解)

flock(handle,type); -
type 鎖的類型
//打開文件
$filename="./data.txt";
$handle=fopen($filename,'r');

//鎖文件
flock($handle,LOCK_EX);

sleep(10);//10秒後解鎖

目錄操作

1. 創建目錄

mkdir(path,mode,recursive); -
part 所要創建的文件夾
mode 權限,主要體現在Linux
recursive 取值爲布爾值,表示要創建層級文件夾
//創建單個文件夾
$folder='Parent';
mkdir($folder);
//創建多級文件夾
$folder='Parent/Childen/';
mkdir($folder,1,true);

2. 打開目錄

opendir(folder); -
folder 表示文件夾目錄的一個字符串
如果打開成功返回一個資源類型

3. 關閉目錄

closedir(handle); -
handle opendir函數的返回值

4. 目錄重命名

rename(source,dest); -
source 原文件夾
dest 新文件夾名

5. 刪除目錄

rmdir(folder);

6. 讀取目錄內容

readdir(handle);

用於讀取文件夾的內容,只能讀取當前層級內容,不能讀取子文件夾中的內容

每次只讀取一個條目,並將指針下移一行

7. 掃描目錄

scandir(folder);

一次性將當前文件夾(不包含子文件夾)中所有內容讀取到數組中,並返還這個數組

==圖片2==

8.判斷文件夾

is_dir(dir);

dir就是一個表示文件夾的字符串

用於判斷文件夾

9.遍歷文件夾

//遍歷制定文件夾中的所以內容
//1、設置一個函數,輸出給定的文件夾中所有的內容
//2、如果是文件夾以紅色顯示,如果是文件以藍色顯示(區分文件夾與文件)
//3.如果是子文件夾,再遍歷出子文件夾左右內容
$dir='../demo';
function getTree($dir){
    $arr=scandir($dir);
    foreach ($arr as $v){
        $item=$dir.'/'.$v;
        //判斷是否爲文件夾
        if(is_dir($item)) {
            //如果是文件夾,且不是.獲..,繼續遍歷
            if($v=='.'||$v=='..'){
                continue;
            }
            echo '<font color="red">' . $item . '</font>', '<BR>';
            getTree($item);

        }else{
            //如果不是文件夾,直接輸出
            echo '<font color="blue">' . $item . '</font>', '<BR>';
        }
    }
}
getTree($dir);

HTTP協議

1.概念

HyperText Transformation Protocol(超文本傳輸協議)

HTTP互聯網一個基石,就是客戶端與web服務的通訊規則,規定了通訊雙方通許時所採用的格式,以及格式的含義

2.HTTP協議的特點

  1. 支持c/s(客戶端/服務器)結構
  2. 簡單,客戶端向服務器端發起請求時,只需要傳遞所請求的文件即可
  3. 靈活,服務器端向客戶端響應數據,可通過content-type,來設置返回的數據類型
  4. 無連接,服務器每次只處理一個請求,請求結束後斷開與客戶端的連接
  5. 無狀態,由於服務器與客戶端具有無連接的特性,所以不瞭解客戶端的本次請求,服務器並不知道本次請求與上次請求是否來源於同一個客戶端,無法跟蹤客戶端的狀態

3.HTTP協議的組成

兩部分組成:

(1).由客戶端發起的請求部分

(2).由服務器端對客戶端的響應部分

==圖片3==

4.HTTP請求

http的請求是由瀏覽器根據用戶輸入的URL,或點擊某個頁面上的按鈕,而自動進行組織的
==圖片4==

HTTP請求由三部分組成

(1). 請求頭

==圖片5==

說明 代碼
請求方式 GET
URI(請求的文件名) /yzf/demo/file.html
協議及版本號 HTTP/1.1

(2). 報頭

==圖片6==

常見 說明
Host 請求的主機名
Connect 保持連接
User-Agent 瀏覽器的相關信息,會自動攜帶給服務器
Accept 瀏覽器所能處理的數據的格式
Accept-Encoding 瀏覽器所支持的壓縮格式
Accept-Language 瀏覽器所支持的語言
If-Modified-Since 用於詢問當前所請求的內容,自從上次是否有修改過

(3). 空行

空行作用是用於分隔協議頭與實際的數據

5.HTTP響應

HTTP協議的響應是由web服務器根據用戶的請求,進行處理後,自動進行組織的

(1).響應行

==圖片7==

- -
協議及版本號 HTTP/1.1
狀態碼 200
狀態描述 OK
常見的狀態碼 描述
200 成功
404 請求文件不存在
403 沒有權限

(2).響應的報頭

==圖片8==

- 說明
Date 時間
Server 服務器的相關信息
Last-Modified 與客戶端請求頭中的Last-Modified-Since對應
Content-Type 此次響應的數據是什麼格式,默認都是text/html
Accept-Length 所返回的數據的長度317
Accept-Range 返回的數據的單位

(3). 空行

空行作用是用於分隔協議頭與響應的實際的數據

6.PHP操作和HTTP響應頭

默認HTTP協議的響應頭是由web服務器自動組織,PHP爲我們提供了一個設置HTTP響應的協議頭的函數header

(1).設置瀏覽器顯示編碼

header(‘Content-Type:text/html;charset=utf8’);

(2).用於進行跳轉

header(‘location:url’);

(3).下載

//1.通過協議頭告訴瀏覽器端,將要發送的數據,不能使用圖片格式,而應該作爲一個應用程序數據
header('Content-Type:application/octet-stream');

//2.通過協議頭告訴瀏覽器,將要發送的數據,作爲附件下載
header('Content-disposition:attachment;filename=ok..png');
$return=file_get_contents('3.png');

數據採集(瞭解)

1.什麼是數據採集

我們創建網站是爲了顯示數據,但有一些數據的獲取成本非常高。所謂的數據採集就是將別人網站的數據,爲我們所用。

2.curl函數

Curl是一個代碼版的瀏覽器。允許我們在代碼中像使用瀏覽器一樣訪問別人的頁面。默認PHP並沒有開啓對curl的支持,需要自己在配置文件中手動開啓。

提示:如果開啓後也無法使用,需要將php目錄中的4個文件libeay32.dll、libss32.dll、ssleay32.dll、php5ts.dll文件複製到Apache的bin目錄中

一般配置好wamp64都是默認開啓的

3.curl函數的使用

(1).初始化curl(打開一個瀏覽器)

curl_init()
==圖片9==

(2).設置參數(輸入地址)

curl_setopt(curl,參數名,參數值); -
curl 就是curl_init的返回值
參數名 參數都是以常量的形式設計的
CURLOPT_URL 用於設置所請求的網址
CURLOPT_RETURNTRANSFER 取值若爲1,表示不將收到的數據直接返回給瀏覽器,而是作爲curl_exec()函數的返回值
CURLOPT_POST 取值爲1
CURLOPT_POSTFIELDS 用於設置post請求所攜帶的數據

(3).執行curl(回車)

curl_exec(); 用於執行某個curl工具

//1.初始化curl(打開一個瀏覽器)
$ci=curl_init();

//2.設置curl選項(輸入地址)
curl_setopt($ci,CURLOPT_URL,'http://www.baidu.com');
curl_setopt($ci,CURLOPT_RETURNTRANSFER,1);

//3.執行curl(回車)
$html= curl_exec($ci);

file_put_contents('test.txt',$html);

4.模擬get請求

5.模擬post請求

//1.初始化curl(打開一個瀏覽器)
$ci=curl_init();

//2.設置curl選項(輸入地址)
$url='http://localhost/yzf/news/php/insertNews.php';
curl_setopt($ci,CURLOPT_URL,$url);
curl_setopt($ci,CURLOPT_RETURNTRANSFER,1);

//設置post請求方式
curl_setopt($ci,CURLOPT_POST,1);
//定義數據
$data=['n_name'=>'^_^','n_id'=>2,'n_sort'=>100,'n_dest'=>'測試','n_content'=>'unstopable'];
curl_setopt($ci,CURLOPT_POSTFIELDS,$data);
for($i=0;$i<3;$i++) {
//3.執行curl(回車)
    curl_exec($ci);

==圖片10==

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章