設定FCKeditor,讓使用者上傳檔案到自己的目錄

設定FCKeditor,讓使用者上傳檔案到自己的目錄
文∕趙英傑

目前的FCKeditor(註:嵌入網頁中,功能類似 Word 的文字編輯器介面)版本,並沒有提供讓使用者上傳檔案到自己的目錄的功能。不過,只要稍加修改它的程式碼,就能達到這項需求。

使用者上傳到自己的目錄

假設網站有兩個分別叫做 cubie 和 eric 的使用者要上傳影像檔。初次上傳檔案時,本文的修改程式將令 FCKeditor 在伺服器端的 uploads 路徑之下,以用戶的名稱建立新的資料夾。

首先使用Dreamweaver的「使用者驗證」伺服器行為指令,建立一個簡單的用戶登入PHP網頁(請參閱《碼上就會:Dreamweaver CS3 PHP、MySQL與AJAX》的9-2頁,「製作管理人員登入頁面」一節),如下圖所示:

使用者登入頁面

從「程式碼」檢視模式可以看到,Dreamweaver將把用戶的帳號名稱記錄在名叫 "MM_Username" 的session變數。根據本文範例檔的設定,登入成功後,瀏覽器將切換到包含 FCKeditor 編輯器的 editor.php 頁面。

接著修改位於底下兩個路徑裡的 config.php 設定檔。第一個設定檔用於設定「上傳檔案」面版裡的上傳路徑;第二個設定檔用於設定「瀏覽檔案」面版裡的上傳檔案路徑:

C:\AppServ\www\fckeditor\editor\filemanager\browser\default\connectors\php\config.php
C:\AppServ\www\fckeditor\editor\filemanager\upload\php\config.php

開啟這兩個設定檔之後,在PHP程式第一行(亦即,<?php的下一行)輸入底下的敘述,啟用session變數:

session_start();

將書本範例程式裡的固定上傳檔案路徑:

$Config['UserFilesPath'] = '/uploads/' ;  // 預設為'/userfiles/'

改成:

$Config['UserFilesPath'] = '/uploads/'. $_SESSION['MM_Username'] . '/' ;

假設登入用戶的帳號為 "cubie",那麼,該用戶的所有影像檔將自動存入底下的資料夾路徑中:

/uploads/cubie/images/

按此連結下載範例檔。本範例檔僅包含「用戶登入」頁面(testUpload.php)以及嵌入FCKeditor的簡易編輯頁面(editor.php),用戶登入頁面的資料庫連線設定沿用書本的範例檔,請直接將範例檔解壓縮放在AppServ的www根目錄,並依照上文修改config.php設定檔之後,即可進行測試。

[2008.5.6補充] 解決FCKeditor 無法上傳檔案的問題

請參閱《碼上就會:Dreamweaver CS3 PHP、MySQL與AJAX》書籍的勘誤表網頁

Posts created 467

9 thoughts on “設定FCKeditor,讓使用者上傳檔案到自己的目錄

  1. 謝謝您提供這麼好的圖文解說,讓我解決了我的大問題。
    上述的部份,一開始的圖片裡有提到可依用戶自動建立的資料夾,但程式部份好像只有寫到圖片會上傳到這些資料夾中,並沒有「自動建立資料夾」的部份,請問這個部份要改那些地方呢?

  2. hi ivy:

    妳可以在用戶註冊成功時隨即建立專屬的資料夾,底下是在目前的PHP路徑下新增一個叫做 ‘cubie’ 資料夾,並賦予 777 權限的PHP程式片段:

    if (mkdir("cubie",0777)){
    echo "資料夾新增完畢";
    }else{
    echo "無法新增資料夾";
    }

    have fun!
    jeffrey

  3. 真的太感謝您了~ 您的辦法很好,我現在終於解決了上傳的這個問題了~~ 另外想問,除了上傳之後,在「瀏覽伺服器」端也有上傳的功能,這個部份可以也修改成上傳到個別資料夾嗎?

  4. 我相信可以,這部份的作法和上文類似,在負責上傳文件的PHP程式中,加入以用戶為名的$_SESSION[‘MM_Username’]變數即可。

    good luck!
    jeffrey

  5. 哈哈~ 我成功了、我成功了~ 真的太感謝您了~ 在瀏覽伺服器端的部份,只要修改fckeditor 資料夾下方的editor\filemanager\browser\default\connectors\php\connector.php的這個檔案,把if ( strlen( $Config[‘UserFilesAbsolutePath’] ) > 0 ) 以下至DoResponse() ;的程式修改成:
    if ( strlen( $Config[‘UserFilesAbsolutePath’] ) > 0 )
    {
    $GLOBALS[“UserFilesDirectory”] = $Config[‘UserFilesAbsolutePath’] ;

    if ( ! ereg( ‘/$’, $GLOBALS[“UserFilesDirectory”] ) )
    $GLOBALS[“UserFilesDirectory”] .= $Config[‘UserFilesPath’] ;
    }
    else
    {
    // Map the “UserFiles” path to a local directory.
    $GLOBALS[“UserFilesDirectory”] = GetRootPath() . $GLOBALS[“UserFilesPath”] ;
    }

    if (isset($_GET[“ServerAbsolutePath”]))
    {
    $GLOBALS[“UserFilesDirectory”] = ‘/UserFiles/’ ;
    }

    DoResponse() ;

    就可以了~~ 這樣就可以上傳到使用者自已的資料夾中嚕~
    而且透過Fckeditor原本會自動建立資料夾的功能~ 在瀏覽伺服器端的上傳,就可以自動建立使用者資料夾,就不用擔心沒有資料夾的問題了~

    真的太感謝您了~ 謝謝您喔~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top