(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...