完全な件名: FCK エディター 2.x: $Config['UserFilesPath'] を安全な方法で完全に動的にすることにより、単一の FCKeditor を使用して、さまざまなアプリケーションのさまざまなフォルダーにファイル/画像/ビデオをアップロードする
それは多くの方法で行うことができます。私のphpアプリケーションのコード構造に従って適用したプロセスを説明しています。サーバーのサブフォルダーとして各アプリケーションを使用して、さまざまなアプリケーションで従った同じコード構造/フレームワーク。したがって、単一の FCKeditor を使用し、それを何らかの方法で構成して、すべてのアプリケーションで適切に動作するようにする必要があります。FCKeditor のコンテンツ部分は問題ありません。単一の FCKeditor コンポーネントから、さまざまなアプリケーションやプロジェクトで簡単に再利用できます。ただし、画像、ビデオ、その他のドキュメントなどのファイルのアップロードで問題が発生します。別のプロジェクトに適用できるようにするには、ファイルを別のプロジェクトの別のフォルダーにアップロードする必要があります。そして、その $Config['UserFilesPath'] は、動的フォルダー パスで構成する必要があります。これは、プロジェクトごとに異なるフォルダー パスを意味します。ただし、同じ場所で同じ FCKeditor コンポーネントを呼び出します。いくつかの異なるプロセスを一緒に段階的に説明しています。これらは、FCKeditor バージョン 2.5.1 と VersionBuild 17566 でうまく機能しました。他の人でも機能することを願っています。他の開発者が機能しない場合は、プロジェクトのコード構造とフォルダーの書き込み権限、および FCKeditor のバージョンに従って、それらのプロセスを微調整する必要がある可能性があります。
1) fckeditor\editor\filemanager\connectors\phpconfig.php ファイル内
a) グローバル $Config の後に移動します。および $Config['Enabled'] = false ; i)セッションに依存する安全な方法が必要な場合:単一のサイト設定のみ:つまり、1つのプロジェクトドメインまたはサブドメインごとに1つのFCKeditorであり、複数のプロジェクトに対して1つのFCKeditorではなく、次のコードを配置します:
if(!isset($_SESSION)){
session_start();
}
if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") {
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH'];
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}
注意: $_SESSION['SESSION_SERVER_RELATIVEPATH']: webroot に対応するプロジェクトの相対フォルダー パス。「/project/folder/path/」のようにして、セッションが開始されたプロジェクトの共通ファイルにこのセッション変数を設定する必要があります。また、プロジェクトの構成ファイルとして、configuration/configuration.php が必要です。名前またはパスが異なる場合は、configuration/configuration.php の代わりに対応するパスをここに配置する必要があります。
ii) 異なるサブフォルダーとして表される異なるプロジェクトに単一の FCKeditor コンポーネントを使用し、セッションに依存する安全な方法を使用する場合 (単一のサーバーでセッションを区別するために、異なるプロジェクトに異なる session_name を想定)。ただし、プロジェクトがサブドメインまたは別のドメインとして表されている場合、次のセッションに依存しない方法 (iii) を使用する必要がある場合は機能しません (ただし、安全ではありません)。次のコードを配置します。
if(!isset($_SESSION)){
session_name($_REQUEST['param_project_to_fck']);
session_start();
}
if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") {
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH'];
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}
前のポイント、つまりポイント (i) の最後にある NB をお読みください。
iii) 単一の FCKeditor コンポーネントを異なるサブフォルダとサブドメインまたはドメインのいずれかで表される異なるプロジェクトに使用する場合 (ただし、完全に安全ではありません)。次のコードを配置します。
if(isset($_REQUEST['param_project_to_fck']) && $_REQUEST['param_project_to_fck']!=""){ //base64 encoded relative folder path of the project corresponding to the webroot; should be like "/project/folder/path/" before encoding
$relative_path=base64_decode($_REQUEST['param_project_to_fck']);
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}
ポイント(i)の最後にある注意事項をお読みください
b) その後、選択したケースについて、次のコードを見つけてください。
// Path to user files relative to the document root.
$Config['UserFilesPath'] = '/userfiles/' ;
次のコードを置き換えます。
if(isset($SERVER_RELATIVEPATH) && $SERVER_RELATIVEPATH==$relative_path) { //to make it relatively secure so that hackers can not create any upload folder automatcally in the server, using a direct link and can not upload files there
$Config['Enabled'] = true ;
$file_upload_relative_path=$SERVER_RELATIVEPATH;
}else{
$Config['Enabled'] = false ;
exit();
}
// Path to user files relative to the document root.
//$Config['UserFilesPath'] = '/userfiles/' ;
//$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ;
$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path;
$SERVER_RELATIVEPATH は相対パスであり、以前に含まれたプロジェクトの構成ファイルに設定する必要があります。
ここで、$file_upload_relative_path 変数を使用して $Config['UserFilesPath'] を他の動的フォルダー パスに設定できます。私の bluehost Linux サーバーでは、プロジェクト ルート フォルダー (0755 パーミッション) と userfiles フォルダーの間でフォルダー ユーザーパーミッションが競合していたためです。その下および userfiles の下のサブフォルダー (FCKeditor のコーディングでは 0777 である必要があります) にあるため、これらのフォルダーにファイルをアップロードすることはできません。そこで、サーバーの webroot (プロジェクト ルート フォルダーの先) にフォルダー userfiles を作成し、パーミッションを 0777 に設定し、$config 設定のコードを次のように使用します。
$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path;
ただし、プロジェクトのサブフォルダーの書き込み権限に問題がない場合は、前の行を使用できます (前のコード セグメントでコメント アウトされています)。
$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ;
既存の $Config['UserFilesPath'] = '/userfiles/' をコメントアウトする必要があります。ファイルの他の場所に存在する場合は、このファイルを置き換えるか、単にコメントアウトしてください。
2) 1) (a) (ii) または (iii) の方法を選択した場合は、
(a) fckeditor\editor\filemanager\browser\default\browser.html ファイルを開きます。
次の行を検索します: var sConnUrl = GetUrlParam( 'Connector' ) ;
その行の後に次のコマンドを追加します。
var param_project_to_fck = GetUrlParam( 'param_project_to_fck' ) ;
次に、次の行を検索します: sUrl += '&CurrentFolder=' + encodeURIComponent( this.CurrentFolder ) ;
その行の後に次のコマンドを追加します。
sUrl += '¶m_project_to_fck=' + param_project_to_fck ;
(b) ここで、ckeditor\editor\filemanager\browser\default\frmupload.html ファイルを開きます。
次の行を検索します (SetCurrentFolder() 関数内にあるはずです)。
sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;
その行の後に次のコマンドを追加します。
sUrl += '¶m_project_to_fck='+window.parent.param_project_to_fck;
3) プロジェクトで FCKeditor を表示したい場所では、対応する php ファイル/ページの最初にこれらの行を配置する必要があります。
include_once(Absolute/Folder/path/for/FCKeditor/."fckeditor/fckeditor.php") ;
$oFCKeditor = new FCKeditor(Field_name_for_editor_content_area) ;
$oFCKeditor->BasePath = http_full_path_for_FCKeditor_location.'fckeditor/' ;
$oFCKeditor->Height = 400;
$oFCKeditor->Width = 600;
$oFCKeditor->Value =Your_desired_content_to_show_in_editor;
$oFCKeditor->Create() ;
a) ここで、1) (a) (ii) または (iii) の方法を選択した場合は、その行の前に次のコード セグメントを配置します。 $oFCKeditor->Create() ;
$oFCKeditor->Config["LinkBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Connector=../../connectors/php/connector.php¶m_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
$oFCKeditor->Config["ImageBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/php/connector.php¶m_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
$oFCKeditor->Config["FlashBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Flash&Connector=../../connectors/php/connector.php¶m_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
b) 1) (a) (ii) の方法を選択した場合、上記のコード コード セグメントで、すべてのテキストを置き換えます: base64_encode($SERVER_RELATIVEPATH) を次のテキストに置き換えます: base64_encode(session_name())
これで完了です。