socket的服務器和客戶端都是要用php命令來運行的。平常我們上傳文件是瀏覽本地文件,通過一個php程序將文件上傳一個地方,這個時候我們用php命令來運行php程序就不方便了。這個時候我們可以用fsockopen來打開一個socket通道,並且可以通過瀏覽器來訪問頁面。下面有一個例子,大家可以試一下。
upload.html
瀏覽本地文件上傳到中間文件image.php
image.php來向socket傳送數據
$fp = fsockopen("127.0.0.1", 10008, $errno, $errstr, 10);
$array = $_FILES['photo'];
if(!$fp){
echo "open fail";
}else{
if(!emptyempty($array)){
$str= 'filename:'.$array['name'];
fwrite($fp,$str);
$filename = $array['tmp_name'];
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fwrite($fp,$contents);
}
echo $fp;
}
fclose($fp);
?>
他的作用是和SOCKET服務器,建立通信,將數據輸送到socket通道中
server.php接收到數據
// 建立server端socket
$tcp = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $tcp);
socket_bind($socket, '127.0.0.1', 10008); //綁定要監聽的端口
socket_listen($socket); //監聽端口
//初始化一個數據,和客戶端通信
$buffer = "connect";
$path = "/home/zhangy/www/test/";
while (true) {
// 接受一個socket連接
$connection = socket_accept($socket);
if(!$connection){
echo "connect fail";
}else{
echo "Socket connected\n";
// 向客戶端傳遞一個信息數據
if ($buffer != "") {
echo "send data to client\n";
socket_write($connection, $buffer . "\n");
echo "Wrote to socket\n";
} else {
echo "no data in the buffer\n" ;
}
//從客戶端取得數據
while($flag = @socket_recv($connection, $data, 2048, 0)){
if (false !== strpos($data,'filename:')){
$filename = substr($data,9);
$filename = $path.$filename;
//根據傳過來的名子打開一個文件
$fp = fopen($filename,"wb");
continue;
}
fwrite($fp,$data);
}
fclose($fp);
}
socket_close($connection);
//關閉 socket
printf("Closed the socket\n");
}
?>
他的作用是接收數據,並將數據存儲存起來