PHP網路程式設計

2022-07-12 16:51:26 字數 2548 閱讀 4379

(1)通過訪問檔案的方式訪問其他**:

之後我們可以將其內容寫入我們自己的檔案中。以此方法我們可以將多個**中我們感興趣的內容搜尋並儲存到我們自己的文件中。

比如可以實行以下方法:

$url_list = file("");

$demo_web = fopen("demo_web.php",'a');

foreach($url_list

as$one_list

)fclose($url_list);

(2)php對url的解析:

url的基本組成成分:協議名(scheme)、主機名(host)、埠號(port)、檔案路徑(path)、查詢引數(query)

php可以使用parse_url()函式來解析url,將需要解析的url作為引數傳給這個函式,這個函式會將url變成陣列。

該陣列中各個鍵值名和所對應的意思就是我上面列的「基本成分」。

如:$demo = parse_url("");

$demo['host']就是「www.example.com」        $demo['path']就是index.php

(3)phpsocket程式設計:

socket執行的基本機制:

在伺服器和客戶端上各建乙個socket就可以進行通訊了。

伺服器端:伺服器先初始化socket,之後繫結埠,再對埠進行監聽,最後呼叫accept先將伺服器端的socket阻塞住,等待客戶端的socket連線。

客戶端:先初始化乙個socket,之後連線到阻塞中伺服器端socket,如果連線成功,則客戶端與伺服器的連線就建立了。

客戶端傳送資料請求,伺服器端接收並處理請求,然後把回應資料傳送到客戶端,客戶端讀取資料,最後關閉連線,這樣一次互動就結束了。

而在php中如果要開啟乙個socket,需要使用到fsockopen()函式。

fsockopen()函式的引數依次為:url、埠號、乙個存放錯誤編號的變數、乙個存放錯誤資訊字串的變數、超時等待時間。(只有第乙個引數為必須的)。

這個fsockopen()函式和fopen()函式類似,得到的都是乙個檔案指標,所以也可以使用fwrite()等操作檔案的函式

在使用fsockopen()建立了連線後,則使用fwrite()函式向伺服器寫入一些資料,如:

$fp = fsockopen("www.example.com",80,$errno,$errstr,30);

if(!$fp

)else

關於上面的**:

1、寫入$fp的$send字串實際上是利用「一系列http協議頭來啟動通訊過程」,如「head/http/1.1\r\n」其中的head就是請求型別,當然也可以用get或post來請求,而後面的\r\n只是為了滿足格式而已。(同理下面增加進$send的兩個字串也都是http協議頭)

2、通過fwrite傳送http報頭後,該$fp會返回自己的http報頭,通過fgets()函式讀取其中的128個字串,並賦值給$data,這個$data中的空格後面的字串被賦給了$code。

而這個$code就是http狀態碼,只有當這個狀態碼為200時,表示該url為可用的,任何其他數值的狀態碼都表示存在問題。

(4)使用curl:

curl的作用是「模擬瀏覽器請求」,我們可以用curl細化我們的http請求功能,而不僅僅是人工瀏覽乙個頁面。

php可以通過shell_exec()及其他函式來呼叫curl,甚至還有一套curl類庫:libcurl,操作步驟如下:

1、以要訪問的url作為引數,呼叫curl_init()來開始乙個curl事務

$cur = curl_init('www.example.com');

該函式會返回該curl事務的指標,我們接下來就是操作這個事務的指標。

2、接下來我們要多次呼叫curl_setopt()函式來設定該事務的選項(可設定的選項太多,在這不一一枚舉了),語法如下:

curl_setopt($curl,"可設定的選項",value);

3、設定完所有選項後,使用curl_exec()函式來執行該事務,將返回的資料賦給乙個變數:

$result = curl_exec($curl);

curl_close($curl);

下面列舉幾個常用的設定選項:

1、告訴curl,如果發生錯誤,直接停止執行:

curl_setopt($curl,curlopt_failonerror,1);

curl_setopt($curl,curloapt_timeout,5);

3、設定curl使用post方法提交資料:

curl_setopt($curl,curloapt_post,1);

4、設定post提交的資料:

curl_setopt($curl,curloapt_postfields,'name=小明&age=12');

(tip:curl工具還能夠傳送、接收cookie,處理檔案上傳,通過ssl連線工作,處理ftp檔案)

php的網路程式設計

http協議解析介紹 http協議是個請求 應答模式的基於流的協議,下層走的是tcp協議。主要是請求頭 請求內容 響應頭 響應內容的方式 我使用charls類似c的socket程式設計c的socket程式設計 get模組 function get url,array get array array ...

《PHP程式設計網路大講堂》 摘錄11 4

2.語法基礎 echo 不能用在複雜表示式,因為返回void,能輸出多個字串。i 我 you 你 echo i,很好,you 最近怎麼樣?print 返回boolean值 printf 返回整型數值,表示字串長度 printf s is d years old.candy 20 輸出 candy i...

網路程式設計 PHP 實現 「非阻塞IO模型「

如果看不明白,可以翻開我關於網路程式設計的其他 從簡單到複雜的實現 非阻塞io的使用使得可以在單個程序中管理多個連線 自定義流格式請檢視 注意 unix tcp是流 udp是資料報。addr tcp mode stream server bind stream server listen socke...