php 利用socket上傳檔案

來源:互聯網
上載者:User

標籤: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

 

查看複製列印?
  1. <html>  
  2. <body>  
  3. <form action=‘image.php‘ method=‘post‘ name=‘form‘ enctype=‘multipart/form-data‘>  
  4. <input type=‘file‘ name=‘photo‘>  
  5. <input type=submit value=‘submit‘>  
  6. </form>  
  7. </body>  
  8. </html>  

瀏覽本地檔案上傳到中間檔案image.php

三,image.php來向socket傳送資料

查看複製列印?
  1. <?php  
  2. $fp = fsockopen("127.0.0.1", 10008, $errno, $errstr, 10);  
  3.   
  4. $array = $_FILES[‘photo‘];  
  5.   
  6. if(!$fp){  
  7.     echo "open fail";  
  8. }else{  
  9.   
  10.     if(!emptyempty($array)){  
  11.   
  12.     $str= ‘filename:‘.$array[‘name‘];  
  13.     fwrite($fp,$str);  
  14.     $filename = $array[‘tmp_name‘];  
  15.     $handle = fopen($filename, "r");  
  16.   
  17.     $contents = fread($handle, filesize($filename));  
  18.   
  19.     fwrite($fp,$contents);  
  20.     }  
  21.     echo $fp;  
  22. }  
  23. fclose($fp);  
  24. ?>  

他的作用是和SOCKET伺服器,建立通訊,將資料輸送到socket通道中

四,server.php接收到資料

查看複製列印?
  1. <?php  
  2. // 建立server端socket  
  3. $tcp = getprotobyname("tcp");  
  4. $socket = socket_create(AF_INET, SOCK_STREAM, $tcp);  
  5. socket_bind($socket, ‘127.0.0.1‘, 10008);       //綁定要監聽的連接埠  
  6. socket_listen($socket);       //監聽連接埠  
  7.   
  8. //初始化一個資料,和用戶端通訊  
  9. $buffer = "connect";  
  10. $path = "/home/zhangy/www/test/";  
  11. while (true) {  
  12.     // 接受一個socket串連  
  13.     $connection = socket_accept($socket);  
  14.     if(!$connection){  
  15.         echo "connect fail";  
  16.     }else{  
  17.             echo "Socket connected\n";  
  18.             // 向用戶端傳遞一個資訊資料  
  19.             if ($buffer != "") {  
  20.                 echo "send data to client\n";  
  21.                 socket_write($connection, $buffer . "\n");  
  22.                 echo "Wrote to socket\n";  
  23.             } else {  
  24.                 echo "no data in the buffer\n" ;  
  25.             }  
  26.   
  27.             //從用戶端取得資料  
  28.      while($flag = @socket_recv($connection, $data, 2048, 0)){  
  29.           if (false !== strpos($data,‘filename:‘)){  
  30.              $filename = substr($data,9);  
  31.   
  32.              $filename = $path.$filename;  
  33.                           //根據傳過來的名子開啟一個檔案  
  34.              $fp = fopen($filename,"wb");  
  35.              continue;  
  36.           }  
  37.         fwrite($fp,$data);  
  38.      }  
  39.             fclose($fp);  
  40.     }  
  41.   
  42.     socket_close($connection);  
  43.     //關閉 socket  
  44.     printf("Closed the socket\n");  
  45. }  
  46. ?>  

他的作用是接收資料,並將資料存放區存起來

php 利用socket上傳檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.