1

我正在为 PHP 使用 fckeditor。我已经设置了图片上传的绝对路径。我可以上传图片,但我无法使用已上传的图片。谁能帮我找到我的问题?

这是我在 config.php 文件中更改的代码:

// Path to user files relative to the document root.
$Config['UserFilesPath'] = '/userfiles/' ;

// Fill the following value it you prefer to specify the absolute path for the
// user files directory. Useful if you are using a virtual directory, symbolic
// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
// Attention: The above 'UserFilesPath' must point to the same directory.
$Config['UserFilesAbsolutePath'] = '/var/www/host/mysite//userfiles/' ;
4

5 回答 5

4

在谷歌上搜索了一整天后,我刚刚解决了这个令人沮丧的问题。

解决方案在这里。寻找:

返回完整的 URL

您可以将文件浏览器配置为向 FCKeditor 返回完整的 URL,例如“http://www.example.com/userfiles/”,而不是绝对 URL,例如“/userfiles/”。为此,您必须配置连接器,结合 UserFilesPath 和 UserFilesAbsolutePath 设置:

  • UserFilesPath:在此处包含用户文件目录的完整 URL。例如,将其设置为“http://www.example.com/userfiles/”。

  • UserFilesAbsolutePath:在此处包含到达上述 URL 目录的服务器路径。例如,在 Windows 环境中,您可能有类似“C:/inetpub/mysite/userfiles/”的内容,而在 Linux 上,可能有类似“/usr/me/public_html/mysite/userfiles/”的内容。

只需将上述设置调整为您的安装值,文件浏览器就会开始向编辑器返回完整的 URL。

于 2011-03-24T18:21:43.000 回答
2

对于您的本地主机:

$Config['UserFilesPath'] = 'http://localhost/mywebsite/userfiles/' ;
$Config['UserFilesAbsolutePath'] = 'C:\\wamp\www\\mywebsite\\userfiles\\' ;

为了从那里获取您的图像,请使用:

$path = 'http://localhost/mywebsite/userfiles/image/myimage.jpg';

现在,对于您的网络服务器:

    $Config['UserFilesPath'] = 'http://localhost/mywebsite/userfiles/' ; // if your webserver named localhost as mine
$Config['UserFilesAbsolutePath'] = '/var/www/vhosts/mywebsite.com/httpdocs/' ;

并且图像路径与上面相同。

于 2012-11-25T17:17:16.447 回答
1

检查文件夹的权限

于 2009-06-08T09:03:48.870 回答
0

完整主题: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 文件中

a) 追求全局 $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");
}

注意:这里,$_SESSION['SESSION_SERVER_RELATIVEPATH']:webroot对应的项目的相对文件夹路径;应该类似于“/project/folder/path/”并将此会话变量设置在会话开始的项目中的一个公共文件中。并且应该有一个configurations/configuration.php作为你的项目中的配置文件。如果它的名称或路径不同,您必须在此处放置相应的路径而不是configurations/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");
}

请阅读上一点末尾的NB,即第(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) 点末尾的 NB

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 += '&param_project_to_fck=' + param_project_to_fck ; 

(b) 现在,打开 ckeditor\editor\filemanager\browser\default\frmupload.html 文件。

搜索这一行(它应该在 SetCurrentFolder() 函数中):

sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;

将此命令放在该行之后:

sUrl += '&param_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&param_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&param_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&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);

b) 如果您选择 1) (a) (ii) 方法,那么在上面的代码代码段中,只需将所有文本:base64_encode($SERVER_RELATIVEPATH) 替换为:base64_encode(session_name())

你完成了。

于 2013-09-28T22:29:20.433 回答
0

UserFilesPath:在此处包含用户文件目录的完整 URL。例如,将其设置为“ http://www.example.com/userfiles/ ”。

于 2014-12-25T13:57:37.700 回答