小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 Ralf_Jones 2005-12-27

用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.
//
//  ------example------
//  $pf = new IBPostFile( "http:///test.php");
//  $pf->setFile( "uploadFile", "d:/images/ice.gif" );
//  $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ā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多