Полная тема: Редактор FCK 2.x: загрузка файлов / изображений / видео в разные папки для разных приложений с использованием одного FCKeditor, делая $ Config ['UserFilesPath'] полностью динамическим и безопасным образом
Это можно сделать разными способами. Я объясняю процесс, который я применил согласно структуре кода моих приложений php. Та же самая структура кода / структура, которой я следовал для разных приложений, с каждым приложением в качестве подпапки на моем сервере. Таким образом, существует логическая необходимость использовать один FCKeditor и настраивать его каким-либо образом, чтобы он работал правильно для всех приложений. Содержательная часть FCKeditor в порядке. Он может быть легко использован различными приложениями или проектами из одного компонента FCKeditor. Но проблема возникает с загрузкой файлов, таких как изображения, видео или любой другой документ. Чтобы сделать его применимым к другому проекту, файлы должны быть загружены в отдельные папки для разных проектов. И для этого $ Config ['UserFilesPath'] должен быть настроен с динамическим путем к папке, означает разные пути к папке для каждого проекта, но вызывать один и тот же компонент FCKeditor в том же месте. Я объясняю некоторые разные процессы вместе пошаговым способом. Они отлично работали с FCKeditor версии 2.5.1 и VersionBuild 17566, и я надеюсь, что они будут работать и для других. Если это не работает для других разработчиков, возможно, им потребуется внести некоторые изменения в этот процесс в соответствии со структурой кода проекта и разрешением на запись в папку, а также с версией FCKeditor.
1) В файле fckeditor \ editor \ filemanager \ connectors \ phpconfig.php
а) Перейти к глобальному $ Config; и $ Config ['Enabled'] = false;
i) Там, если требуется безопасный безопасный метод, зависящий от сеанса: только для настройки одного сайта: то есть один FCKeditor для каждого одного домена или субдомена проекта, а не один 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");
}
N.B .: Здесь, $ _SESSION ['SESSION_SERVER_RELATIVEPATH']: относительный путь к папке проекта, соответствующий webroot; должно быть похоже на «/ project / folder / path /» и установить эту переменную сеанса в общем файле в вашем проекте, где сеанс начался. И в вашем файле конфигурации должен быть файл configurations / configuration.php. Если его имя или путь отличаются, вы должны указать здесь соответствующий путь вместо config / 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)
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 - это относительный путь, и он должен быть задан в файле конфигурации вашего проекта, включенном ранее.
Здесь вы можете установить $ Config ['UserFilesPath'] с любым другим динамическим путем к папке, используя переменную $ file_upload_relative_path. На моем сервере bluehost linux, поскольку они были конфликтом прав доступа пользователя к папке между корневой папкой проекта (разрешение 0755) и папка userfiles под ней и подпапки под userfiles (должно быть 0777 в соответствии с кодировкой FCKeditor), поэтому она не позволяет загружать файлы в эти папки. Итак, я создал папку userfiles в webroot на сервере (за пределами корневой папки проекта) и установил для нее разрешение 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 ())
И все готово.