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

PHP 簡易線上文字編輯器實作

     編輯:PHP 相關知識

前言

作者 leon0324 分享一個極簡的 PHP 線上文字編輯器,支援檔案讀取、編輯、儲存基本功能,程式碼精簡適合學習檔案操作與表單處理。

完整程式碼

<?php
function write_file($filename, $contents) {
    if ($fp = fopen($filename, "w")) {
        fwrite($fp, stripslashes($contents)); // 移除魔術引號添加的斜線
        fclose($fp);
        return 1;
    }
    return 0;
}

if ($submitbutton == "完成") {
    $rs = write_file("DownloadFilesa2001-12-15$page", $test);
    echo "$page<br>";
} elseif ($action == "page") {
    $content = "DownloadFilesa2001-12-15$page";
    $fp = fopen($content, "r") or die("Could not open file.");
    $contents = fread($fp, filesize($content)) or die("Could not read from file.");
    $contents = htmlspecialchars($contents); // 防 XSS
    fclose($fp);
    // 輸出編輯表單 (原文 HTML 片段不完整,此處補全)
    echo "<form method='post'>";
    echo "<textarea name='test' rows='20' cols='80'>$contents</textarea><br>";
    echo "<input type='hidden' name='page' value='$page'>";
    echo "<input type='submit' name='submitbutton' value='完成'>";
    echo "</form>";
} else {
    // 檔案列表或首頁 (原文缺失)
    echo "請選擇要編輯的檔案";
}
?>

功能流程

  1. 列表/首頁:提供檔案連結,帶參數 ?action=page&page=xxx
  2. 讀取顯示:fopen("r") → fread() → htmlspecialchars() 防 XSS → 顯示於 <textarea>
  3. 儲存:表單 POST → stripslashes() 處理魔術引號 → fopen("w") → fwrite()

安全性隱憂 (必須修正)

  • 路徑遍歷:$page 直接拼接路徑,攻擊者可傳入 ../../etc/passwd 讀寫任意檔案。必須用 basename() 或白名單驗證。
  • 魔術引號依賴:stripslashes() 針對已棄用的 magic_quotes_gpc,現代 PHP (5.4+) 已移除,應檢查 get_magic_quotes_gpc() 再處理。
  • 無認證授權:任何人可編輯刪除檔案,實務必加入登入驗證與權限檢查。
  • 編碼問題:未指定字元集,中文易亂碼,建議檔案統一 UTF-8 並送出 header('Content-Type: text/html; charset=utf-8')。

現代化改良方向

  • 使用 file_get_contents() / file_put_contents() 簡化讀寫。
  • 引入 CodeMirror、Ace 等前端程式碼編輯器元件,提供語法高亮、行號、縮排等體驗。
  • 採用 RESTful API + 前端框架 (Vue/React) 分離關注點。
  • 加入版本控制 (Git 整合或簡易備份機制)。

總結

這是一個教學層級的極簡範例,展示 PHP 檔案操作基礎,但絕不可直接用於生產環境。現代開發請使用成熟的線上編輯器方案 (如 VS Code Server、Code-Server、PHP 版 File Manager 等)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved