//首先創建一個Socket句柄
if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) {
echo socket_last_error();
exit;
}
echo "創建Socket句柄 \n";
//連接到服務器的某個對接端口
if(!socket_connect($sock, 'wwww.example.com', 80)) {
echo socket_last_error();
exit;
}
echo "連接服務器 \n";
//發送一個簡單的http信息
$message = "GET /index.html HTTP/1.1 \r\n\r\n";
//發送數據至服務器
if (!socket_send($sock, $message, strlen($message), 0)) {
echo socket_last_error();
exit;
}
echo "請求發送成功 \n";
//接受客戶端的響應
if(socket_recv($sock, $buf, 1024, MSG_WAITALL) === false) {
echo socket_last_error();
exit;
}
//輸出服務器響應
echo $buf;
基本操作總結:
- 創建一個Socket句柄;
- 連接到服務器的接口;
- 發送HTTP消息;
- 發送數據到服務器;
- 接受到客戶端的響應信息;
- 輸出服務器的響應;
PHP開發者在編寫HTTP應用的時候,一般使用的是curl擴展,curl擴展和PHP Socket包的區別在於curl擴展做了更多的抽象,完全的忽略了網絡的存在,而PHP Socket包和底層的Socket API更加類似,靈活度更加強大,當然,對於TCP/IP的本質更加接近。