首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

以文字模式上傳二進位檔案的 PHP 方案

     編輯:PHP 綜合知識

背景與動機

某些虛擬主機或代理伺服器在上傳檔案時會自動加入 Content-Type 標頭,導致二進位檔案(如圖片、壓縮檔)損壞。本方案透過將二進位檔案讀取為文字字串(Base64 或原始位元組),在瀏覽器端複製貼上,再於遠端伺服器端還原,繞過上傳限制。

架構說明

  • index.php:前端介面,提供「讀取」、「保存」、「試看」三種模式。讀取本地檔案 test(需預先更名)並輸出至文字區域;保存模式將文字區域內容寫入檔案;試看模式直接輸出圖片標籤預覽。
  • action.php:後端處理邏輯(原始碼未完整提供),根據 $view 參數決定行為:0 保存、1 試看、2 讀取。

index.php 完整程式碼

<html>
<head>
<title>以文字方式上傳二進位檔案的 PHP 程式</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<table width="760" border="0" cellspacing="0" cellpadding="0" height="25">
  <tr>
    <td><div align="center"><b>圖片上傳</b></div></td>
  </tr>
</table>
<table width="760" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>
      <form name="form" method="post" action="action.php" target="_blank">
        <div align="center">
          <textarea name="pic" cols="80" rows="15"></textarea><br>
          <input type="radio" name="view" value="0" checked> 保存
          <input type="radio" name="view" value="1"> 試看
          <input type="radio" name="view" value="2"> 讀取<br>
          <input type="submit" name="OK" value=" 確 定 ">
          <input type="reset" name="RESET" value=" 取 消 ">
        </div>
      </form>
    </td>
  </tr>
</table>
</body>
</html>

action.php 邏輯補完建議

原始碼僅提供開頭,建議補完如下邏輯:

<?php
$file = "test"; // 固定檔名
switch ($_POST['view']) {
    case '2': // 讀取
        if (file_exists($file)) {
            $fp = fopen($file, "rb");
            $data = fread($fp, filesize($file));
            fclose($fp);
            // 直接輸出二進位資料,或 base64_encode 後輸出
            echo $data; // 瀏覽器會顯示亂碼,使用者複製此內容
        }
        break;
    case '1': // 試看
        if (file_exists($file)) {
            header("Content-Type: image/gif"); // 或自動偵測
            readfile($file);
        }
        break;
    case '0': // 保存
        $data = $_POST['pic'];
        // 若前端為 base64,需 base64_decode
        $fp = fopen($file, "wb");
        fwrite($fp, $data);
        fclose($fp);
        echo "儲存完成";
        break;
}
?>

安全性與限制

  • 僅適合小型檔案(文字區域容量限制、複製貼上效率)。
  • 無驗證機制,任何人可覆寫檔案,實務上需加入密碼或 Session 驗證。
  • 建議改用 Base64 編碼傳輸,避免二進位字元在瀏覽器/剪貼簿過程中遺失。
  • 現代環境建議直接使用 POST 上傳或 FTP/SFTP/SCP,本方案僅為特殊受限環境備案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved