免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
用Socket實現HTTP協(xié)議的文件上傳

用Socket實現HTTP協(xié)議的文件上傳

發(fā)布時間:2005-6-16

//====================================================
//  FileName:IBPostFile.php
//  Summary: 實現HTTP協(xié)議的文件上傳
//  Author: ice_berg16(尋夢的稻草人)
//  LastModifed:2005-3-30
//  copyright(c)2005 ice_berg16@163.com
//  http://www.icebergweb.com
//
//  ------example------
//  $pf = new IBPostFile( "//  $pf->sendRequest();
//  echo $pf->getResponse();
//====================================================

class IBPostFile
{
 var $url;  //要發(fā)送文件的URL
 var $formData; //發(fā)送的表單數據
 var $fileData; //文件數據
 var $boundary; //數據分隔標識
 var $response; //保存服務器返回的信息
 var $username; //需要身份驗證時的用戶名
 var $pwd;  //需要身份驗證時的密碼
 var $port;  //端口號

 var $debug = true; //是否調試

 /* 函數: IBPostFile
 ** 功能: Constructor
 ** 參數: $url String 要發(fā)送文件的URL
 */
 function IBPostFile( $url="", $port="80")
 {
  $this->url  = $url;
  $this->port  = $port;
  $this->boundary = $this->createBoundary();
 }
 
 /* 函數: sendRequest
 ** 功能: 發(fā)送請求并保存結果
 */
 function sendRequest()
 {
  $urlArray = parse_url( $this->url );
  $fp = fsockopen( $urlArray[‘host‘], $this->port );

  $requestData = $this->buildRequest();

  //*
  fwrite( $fp, $requestData );
  
  $content = "";
  while( !feof( $fp ) )
  {
   $content .= fread( $fp, 4096 );
  }
  fclose( $fp );
  //*/
  $this->response = $content;

  if( $this->debug )
  {
   echo "---------HTTP-REQUEST-------";
   echo "$requestData";
   echo "---------HTTP-RESPONSE------";
   echo "$content";
  }
  //*/
 }

 /* 函數: getResponse()
 ** 功能: 返回服務器端的信息
 */
 function getResponse()
 {
  return $this->response;
 }

 /* 函數: setForm( $formData )
 ** 功能: 設置表單的字段值
 ** 參數: $formData Array 字段名和值的數組
 */
 function setForm( $formData )
 {
  $this->formData = $this->buildFormData( $formData );
 }

 /* 函數: setFile( $name, $filePath )
 ** 功能: 設置要發(fā)送的文件
 ** 參數: $name 文件名,即file域的name
 ** 參數: $filePath 要發(fā)送的文件路徑
 */
 function setFile( $name, $filePath )
 {

  $this->fileData = $this->buildFileData( $name, $filePath );
 }
 
 /* 函數: setAuthor( $user, $pwd )
 ** 功能: 設置身份驗證時需要的用戶名和密碼
 ** 參數: $user 用戶名
 ** 參數: $pwd 密碼
 */
 function setAuthor( $user, $pwd )
 {
  $this->username = $user;
  $this->pwd  = $pwd;
 }

 /* 函數: buildRequest()
 ** 功能: 建立請求
 */
 function buildRequest()
 {
  $urlArray = parse_url( $this->url );
  $request = array();

  $request[] = "POST {$urlArray[‘path‘]} HTTP/1.0";
  $request[] = "Host: {$urlArray[‘host‘]}";
  $request[] = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)";
  $request[] = "Accept: */*";
  $request[] = "Accept-Language: zh-cn";
  $request[] = "Connection: Keep-Alive";
  $request[] = "Cache-Control: no-cache";
  
  //需要身份驗證
  if ( !empty( $this->username ) && !empty( $this->pwd ) )
  {
         $request[] = ‘Authorization: BASIC ‘ . base64_encode( $this->username.‘:‘.$this->pwd );
     }

  $request[] = "Content-Type: multipart/form-data; boundary={$this->boundary}";
  $request[] = "Content-Length: " . $this->getDataLength() . "\r\n";

  $requestString = join( "\r\n", $request ) . "\r\n" . $this->formData . "\r\n" . $this->fileData;

    
  if( $this->debug )
  {
   echo "----------- REQUEST_INFOMATION -----------";
   echo "" . $requestString . "";
  }
  return $requestString;
 }

 /* 函數: getDataLength()
 ** 功能: 返回要發(fā)送數據的長度
 */
 function getDataLength()
 {
  return strlen( $this->formData ) + strlen("\r\n") + strlen( $this->fileData );
 }
 
 /* 函數: buildFormData()
 ** 功能: 創(chuàng)建發(fā)送的數據格式
 */
 function buildFormData( $formData )
 {
  $postData = array();
  foreach( $formData as $k => $v )
  {
   $row   = array();
   $row[] = "--{$this->boundary}";
   $row[] = "Content-Disposition: form-data; name=\"$k\"\r\n";
   $row[] = "$v";

   $postData[] = join( "\r\n", $row );
  }

  return join( "\r\n", $postData );
 }
 
 /* 函數: buildFileData( $name, $filePath )
 ** 功能: 創(chuàng)建發(fā)送的文件格式
 */
 function buildFileData( $name, $filePath )
 {
  //讀取文件信息
  $fname  = basename( $filePath );
  $fp  = fopen ( $filePath, "r" );
  $data = fread ( $fp, filesize( $filePath ) );
  fclose ($fp);
  
  $postData = array();
  $postData[] = "--{$this->boundary}";
  $postData[] = "Content-Disposition: form-data; name=\"$name\"; filename=\"$fname\"\r\n";
  //$postData[] = "Content-Type: text/plain\r\n";
  $postData[] = $data;
  $postData[] = "--{$this->boundary}--";

  return join( "\r\n", $postData );
 }

 /* 函數: createBoundary()
 ** 功能: 創(chuàng)建數據分隔標識
 */
 function createBoundary()
 {
  return "---------------------------" . substr(md5(time()), -12 );
 }

}

?>

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
文件各種上傳,離不開的表單
Delphi
JBOSS內容錯亂的分析過程
PHP的三種HTTP請求,php模擬post 提交
原生ajax發(fā)送數據,以及不用的方法發(fā)送
python機器登陸新浪微博抓取數據
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服