萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

移動網站開發教程(五):PHP 文件上傳與下載完整指南

前言

在上一篇教程中,我們探討了 PHP 自定義函數與陣列操作。本篇將深入講解移動互聯網開發中核心的文件上傳與下載機制,涵蓋客戶端配置、服務端處理、PHP 核心配置優化,以及常用文件系統函數與序列化技術。

一、文件上傳核心機制

1. 客戶端表單配置

要啟用文件上傳,HTML 表單必須滿足兩個必要條件:

  • 編碼類型:enctype="multipart/form-data",告訴瀏覽器以二進制流形式傳輸文件數據。
  • 請求方法:method="POST",只有 POST 請求才能攜帶文件數據體。

此外,可選擇性添加一個隱藏字段限制單文件大小上限(單位為位元組):

<input type="hidden" name="MAX_FILE_SIZE" value="2097152"> <!-- 限制 2MB -->

2. 服務端 $_FILES 超全局陣列

文件上傳成功後,PHP 會自動填充 $_FILES 多維陣列,結構如下:

鍵名說明
name客戶端原始文件名
typeMIME 類型(如 image/jpeg)
tmp_name服務端臨時存儲路徑
error錯誤代碼(0 表示成功)
size文件大小(位元組)

3. php.ini 關鍵配置指令

以下配置直接影響上傳行為,建議根據業務需求調整:

指令預設值功能說明
file_uploadsOn是否允許 HTTP 文件上傳
memory_limit8M腳本最大可用內存,防止失控腳本耗盡資源
upload_max_filesize2M單個上傳文件最大值,必須小於 post_max_size
post_max_size8MPOST 請求體最大值,需大於 upload_max_filesize
upload_tmp_dirNULL臨時文件存儲路徑,建議指定獨立目錄並賦予寫入權限

php.ini 上傳配置示例

上傳流程圖解

錯誤代碼對照表

安全檢查清單

二、文件系統核心函數庫

1. 基礎操作函數

函數用途簽名
touch()設定文件訪問/修改時間bool touch(string $filename [, int $time [, int $atime]])
copy()複製文件bool copy(string $source, string $dest)
rename()移動/重命名文件(跨分區亦可)bool rename(string $oldname, string $newname)

2. 高效讀寫函數

函數用途簽名
file_put_contents()原子化寫入字符串到文件(含鎖定、追加模式)int file_put_contents(string $filename, mixed $data [, int $flags [, resource $context]])
file_get_contents()一次性讀取整個文件到字符串(支援偏移/長度)string file_get_contents(string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen]]]])

三、序列化與反序列化

用於將複雜數據結構(陣列、對象)轉化為可存儲/傳輸的字符串格式。

  • serialize():幾乎支援所有類型(資源型別除外),可處理遞歸引用。
    string serialize(mixed $value)
  • unserialize():還原序列化字符串為 PHP 值。
    mixed unserialize(string $str)

序列化示例

反序列化陷阱

進階序列化技巧

四、常用日期時間與字符串函數速查

1. 日期時間函數

  • microtime(bool $get_as_float):返回微秒級時間戳,性能分析必備。
  • date_default_timezone_set(string $tz):設定預設時區(如 'Asia/Taipei'),避免警告。
  • date_default_timezone_get():獲取當前預設時區。

2. 字符串處理函數

函數功能備註
strlen()獲取字節長度多位元組字符需用 mb_strlen()
strtolower() / strtoupper()大小寫轉換區域相關,多語言建議用 mb_strtolower()
ucfirst() / ucwords()首字母/每個單詞首字母大寫
trim() / ltrim() / rtrim()去除首尾/左/右空白字符可自定義字符列表
str_replace() / str_ireplace()大小寫敏感/不敏感替換支援陣列批量替換
md5()計算 MD5 雜湊不可逆,不建議用於密碼存儲
strpos()查找子串首次出現位置嚴格判斷需用 !== false
copyright © 萬盛學電腦網 all rights reserved