Pełny temat: Edytor FCK 2.x: Przesyłanie pliku/obrazu/wideo w różnych folderach dla różnych aplikacji przy użyciu jednego FCKeditora, dzięki czemu $ Config ['UserFilesPath'] jest w pełni dynamiczny w bezpieczny sposób
Można to zrobić na wiele sposobów. Wyjaśniam proces, który zastosowałem zgodnie ze strukturą kodu mojej aplikacji php. Ta sama struktura/struktura kodu, którą stosowałem w przypadku różnych aplikacji, z każdą aplikacją jako podfolderem na moim serwerze. Tak więc istnieje logiczna potrzeba użycia jednego FCKeditora i skonfigurowania go w pewien sposób, aby działał poprawnie we wszystkich aplikacjach. Część zawartości FCKeditor jest w porządku. Może być łatwo ponownie wykorzystany przez różne aplikacje lub projekty z jednego komponentu FCKeditor. Ale problem pojawia się w przypadku przesyłania plików, takich jak obraz, wideo lub inny dokument. Aby było możliwe zastosowanie do innego projektu, pliki muszą zostać przesłane w oddzielnych folderach dla różnych projektów. I dla tego $ Config ['UserFilesPath'] musi być skonfigurowany z dynamiczną ścieżką folderu, oznacza inną ścieżkę folderu dla każdego projektu, ale wywołanie tego samego komponentu FCKeditor w tej samej lokalizacji. Wyjaśniam kilka różnych procesów razem krok po kroku. Te pracował dla mnie dobrze z FCKeditor wersja 2.5.1 i VersionBuild 17566 i mam nadzieję, że będą działać również dla innych. Jeśli nie działa to w przypadku innych deweloperów, może być konieczne wprowadzenie pewnych poprawek w tym procesie, zgodnie ze strukturą kodu projektu i uprawnieniami do zapisu folderów, a także zgodnie z wersją FCKeditor.
1) W fckeditor \ editor \ filemanager \ connectors \ phpconfig.plik php
a) Przejdź do globalnej konfiguracji $; i $ Config ['Enabled'] = false; i) Tam, jeśli chcesz sesji utrzymaniu bezpiecznej metody: tylko dla ustawienia pojedynczej stronie: czyli jeden FCKeditor dla każdej domeny jeden projekt lub subdomenie, a nie jeden FCKeditor do wielokrotnego projektu następnie umieścić ten kod:
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");
}
NB: Tutaj $ _SESSION ['SESSION_SERVER_RELATIVEPATH']: względna ścieżka do folderu projektu odpowiadająca webrootowi; powinno być jak "/ projekt/folder/ścieżka /" i ustawić tę zmienną sesji we wspólnym pliku w projekcie, w którym rozpoczęła się sesja. I powinny być konfiguracje/configuration.php jako plik konfiguracyjny w twoim projekcie. Jeśli jego nazwa lub ścieżka jest inna, musisz umieścić odpowiednią ścieżkę tutaj zamiast konfiguracji/configuration.php
ii) Jeśli chcesz użyć pojedynczego komponentu FCKeditor dla różnych projektów reprezentowanych jako różne podfoldery i zależnych od sesji bezpieczny sposób (Zakładając różne nazwy sesji dla różnych projektów, w celu rozróżnienia ich sesji na jednym serwerze). Ale nie zadziała, jeśli projekty będą reprezentowane jako subdomeny lub różne domeny, a następnie będą musiały korzystać z niezależnego od sesji sposobu (iii) podanym poniżej (choć jest to niebezpieczne). Umieść ten kod:
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");
}
Proszę przeczytać N.B. na końcu poprzedniego punktu, tj. (i)
iii) Jeśli chcesz użyć pojedynczego komponentu FCKeditor dla różnych projektów reprezentujących różne podfoldery, a także subdomen lub domen (chociaż nie jest to w pełni bezpieczne). Umieść ten kod:
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");
}
Proszę przeczytać N.B. na końcu punktu (I)
b) Teraz po tym za każdym przypadku wybranego, proszę znaleźć ten kod:
// Path to user files relative to the document root.
$Config['UserFilesPath'] = '/userfiles/' ;
i zastąpić następujący kod:
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;
Tu $ SERVER_RELATIVEPATH jest ścieżką względną i musi być ustawiona w pliku konfiguracyjnym twojego projektu zawartym wcześniej.
Tutaj możesz ustawić $ Config ['UserFilesPath'] z dowolną inną ścieżką do folderu dynamicznego za pomocą zmiennej $ file_upload_relative_path. W moim serwerze linuksowym bluehost, ponieważ był to konflikt uprawnień użytkownika folderu pomiędzy folderem głównym projektu (uprawnienie 0755) oraz folder userfiles pod nim i podfoldery w plikach userfiles (powinno być 0777 zgodnie z kodowaniem FCKeditor), więc nie pozwala na przesyłanie plików do tych folderów. Więc stworzyłem folder userfiles w webroot serwera (poza głównym folderze projektu), i ustawić uprawnienie do 0777 do niego użyć kodu dla ustawienia config $ jak:
$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path;
Ale jeśli masz nie ma problemu z praw zapisu podfolderów projektu w Twoim przypadku, to można skorzystać z poprzednią linię (wypowiedziało się w poprzednim segmencie kodu):
$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ;
przeszkadza, to maszt wykomentuj istniejącą $ config [” UserFilesPath '] ='/userfiles/'; w tym pliku, zastępując lub po prostu komentując, jeśli istnieje w innym miejscu pliku.
2) Jeśli wybierzesz 1) (a) (ii) lub (iii) następnie otwórz metodę
(a) fckeditor \ editor \ filemanager \ browser \ default \ browser.html file.
Wyszukaj tę linię: var sConnUrl = GetUrlParam ("Connector");
umieścić te polecenia po tej linii:
var param_project_to_fck = GetUrlParam('param_project_to_fck') ;
Teraz Szukaj dla tej linii: SURL + = '& currentfolder =' + encodeURIComponent (this.CurrentFolder);
Umieść tę komendę po tej linii:
sUrl += '¶m_project_to_fck=' + param_project_to_fck ;
(B) Teraz otwórz CKEditor \ editor \ filemanager \ przeglądarki \ domyślny plik \ frmupload.html.
Szukaj tej linii (powinien być w funkcji SetCurrentFolder()):
sUrl += '&CurrentFolder=' + encodeURIComponent(folderPath) ;
Umieść tę komendę po tej linii:
sUrl += '¶m_project_to_fck='+window.parent.param_project_to_fck;
3) Teraz, w którym chcesz, aby pokazać FCKeditor w projekcie, trzeba umieścić te linie najpierw w odpowiednim pliku php/strony:
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) Teraz, jeśli wybierzesz metodę 1) (a) (ii) lub (iii), umieść następujący fragment kodu przed tą linią: $ 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) jeśli wybrano 1) (a) (ii) metoda, po czym w powyższym segmencie kodu kodu, po prostu wymienić wszystkie teksty: base64_encode ($ SERVER_RELATIVEPATH) z tego jeden: base64_encode (session_name())
I gotowe.
Dziękuję za próbę pomocy, ale to nie działa. Właściwość config-only dotyczy tylko edytora, a nie edytora plików. – Espo