ホームページ  >  記事  >  バックエンド開発  >  PHP ブレークポイント再開関数_PHP チュートリアル

PHP ブレークポイント再開関数_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:07:061224ブラウズ

再開可能なアップロードとは、アップロード中にアップロードタスク(ファイルまたは圧縮パッケージ)を人為的にいくつかの部分に分割し、各部分をスレッドを使用してアップロードすることを指します。PHPの再開可能なアップロード機能の実装方法を見てみましょう。

再開可能なアップロードとは、アップロード中にアップロードタスク(ファイルまたは圧縮パッケージ)を人為的にいくつかの部分に分割し、各部分をスレッドを使用してアップロードすることを指します。PHPの再開可能なアップロード機能の実装方法を見てみましょう。

/**
* 著者 ユウエンシュイ
* 再開可能なダウンロードをサポート
* * コード例:
* * $down = 新しい SD_DownLoad();
* * $down->Down('E:/iso/MS.Office2003SP1.CHS.iso');
**/
クラス SD_DownLoad {
    
     /**
* ダウンロードの開始点
*
* @アクセス非公開
* @var 整数
                     */
     プライベート $mDownStart;
    
     /**
*ファイルサイズ
*
* @アクセス非公開
* @var 整数
                     */
     プライベート $mFileSize;
    
     /**
* ファイルハンドル
*
* @アクセス非公開
* @var 整数
                     */
     プライベート $mFileHandle;
    
     /**
*ファイルのフルパス
*
* @アクセス非公開
* @var 文字列
                     */
     プライベート $mFilePath;
    
     /**
※ファイルをダウンロードする際に表示されるファイル名
*
* @アクセス非公開
* @var 文字列
                     */
     プライベート $mFileName;
    
     /**
* コンストラクター
*
* @アクセス公開
* @return void
**/
     パブリック関数 __construct() {
     }
    
     /**
*ダウンロード
*
* @param string $pFilePath ファイルのフルパス
* @param string pFileName ファイルをダウンロードするときに表示されるファイル名、デフォルトは実際のファイル名です
* @アクセス公開
* @return void
**/
     パブリック関数 Down($pFilePath, $pFileName = '') {
          $this->mFilePath = $pFilePath;
          if(!$this->IniFile()) $this->SendError();
          $this->mFileName = empty($pFileName) ? $this->GetFileName() : $pFileName;
         
          $this->IniFile();
          $this->SetStart();
          $this->SetHeader();
         
          $this->Send();
     }


     /**
* 初期化ファイル情報
*
* @アクセス非公開
* @return boolean
**/
     プライベート関数 IniFile() {
          if(!is_file($this->mFilePath)) return false;
          $this->mFileHandle = fopen($this->mFilePath, 'rb');
          $this->mFileSize = ファイルサイズ($this->mFilePath);
          true を返します;
     }
    
     /**
*ダウンロード開始ポイントを設定します
*
* @アクセス非公開
* @return void
**/
     プライベート関数 SetStart() {
          if (!empty($_SERVER['HTTP_RANGE']) && preg_match("/^bytes=([d]?)-([d]?)$/i", $_SERVER['HTTP_RANGE'], $match) ){
               if(empty($match[1])) $this->mDownStart = $match[1];
               fseek($this->mFileHandle, $this->mDownStart);
          }
          他に{
               $this->mDownStart = 0;
          }
     }
    
     /**
* httpヘッダーを設定します
*
* @アクセス非公開
* @return void
**/
     プライベート関数 SetHeader() {
          @header("キャッシュ制御: public");
          @header("プラグマ: public");
          Header("Content-Length: " . ($this->mFileSize - $this->mDownStart));
          if ($this->mDownStart > 0) {
               @Header("HTTP/1.1 206 部分コンテンツ");
               Header("Content-Range: bytes" . $this->mDownStart . "-" . ($this->mFileSize - 1) . "/" . $this->mFileSize);
          }
          他に{
               Header("Accept-Range: バイト");
          }
          @header("Content-Type: application/octet-stream");
          @header("Content-Disposition:attachment;filename=" . $this->mFileName);
     }
    
     /**
* フルパスのファイル名部分を取得します
*
* @アクセス非公開
* @戻り文字列
**/
     プライベート関数 GetFileName() {
          ベース名を返す ($this->mFilePath);
     }
    
     /**
         *データ送信
*
* @アクセス非公開
* @return void
**/
プライベート関数 Send() {
fpassthru($this->mFileHandle);
}

/**
*送信エラー
*
* @アクセス公開
* @return void
**/
パブリック関数 SendError() {
@header("HTTP/1.0 404 が見つかりません");
@header("ステータス: 404 見つかりません");
exit();
}
}
?>

www.bkjia.com本当http://www.bkjia.com/PHPjc/630477.html技術記事アップロードの再開とは、アップロード時にアップロード タスク (ファイルまたは圧縮パッケージ) を人為的にいくつかの部分に分割し、各部分をスレッドを使用してアップロードすることを指します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。