標籤:blog http io os ar strong for 檔案 資料
php 利用socket上傳檔案
張映 發表於 2010-06-02
分類目錄: php
一,利用fsockopen來上傳檔案
以前我寫過一篇關於socket通訊原理的博文http://blog.51yip.com/php/673.html有興趣的朋友可以看看,前面講的那篇博文,socket的伺服器和用戶端都是要用php命令來啟動並執行。平常我們上傳檔案是瀏覽本地檔案,通過一個php程式將檔案上傳一個地方,這個時候我們用php命令來運行php程式就不方便了。這個時候我們可以用fsockopen來開啟一個socket通道,並且可以通過瀏覽器來訪問頁面。下面有一個例子,大家可以試一下。
二,upload.html
查看複製列印?
- <html>
- <body>
- <form action=‘image.php‘ method=‘post‘ name=‘form‘ enctype=‘multipart/form-data‘>
- <input type=‘file‘ name=‘photo‘>
- <input type=submit value=‘submit‘>
- </form>
- </body>
- </html>
瀏覽本地檔案上傳到中間檔案image.php
三,image.php來向socket傳送資料
查看複製列印?
- <?php
- $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接收到資料
查看複製列印?
- <?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");
- }
- ?>
他的作用是接收資料,並將資料存放區存起來
php 利用socket上傳檔案