問題: kcfinder の定義にあるように、このリンクを使用して kcfinder を開きます。
window.open('/kcfinder/browse.php?type=files&dir=files/public&subDir=/PO/200836', 'kcfinder_textbox',
', width=800, height=600');
ここでは、URL が次のようになるように、サブディレクトリ パスも含めるように URL を変更しましたhttp://192.168.212.200/kcfinder/browse.php?type=files&dir=files/public&subDir=/PO/200836
。
パーツには、subDir
設定する (存在しない場合は作成する) ディレクトリ名があります。config.php には、ルートに設定されたディレクトリが既にあります。したがって、が提供されている場合、 config.php のルート内subDir
に が作成されます。subDir
ここで、この subDir を kcfinder の新しいルート ディレクトリにしたいと考えています。
たとえば、uploadURL
構成内のmy/var/www/html/web/upload/
が上記の URL の新しいルートである場合、 になり/var/www/html/web/upload/PO/200836/
ます。
試行:/var/www/html/web/upload/PO/200836/
上記の URL (または任意の URL)のディレクトリを正常に作成できました。ただし、kcfinder のルートはまだ に設定されてい/var/www/html/web/upload/
ます。そのため、kcfinder を開くと、ディレクトリが内部的に作成されますが、ルートは config.php の元のルートに設定されたままです。
次の行を追加して、ルート ディレクトリを URL 経由で渡すサブ ディレクトリに変更しました。
$this->config["uploadURL"] .= $_GET['subDir'];
$this->config["uploadDir"] .= $_GET['subDir'];
$this->typeDir = $this->config["uploadDir"] ."/files";
$this->typeURL = $this->config["uploadURL"] ."/files";
私もこれをgithubの問題として提起しましたが、そこからの応答はまだありません。必要な唯一の変更は、作成中の新しいディレクトリに表示するようにルート ディレクトリを設定することだと思いますが、どこでこれを行うべきかわかりません。
これに対する回避策はありますか?
PS: 私は、これを行う方法がある他のオープン ソースWeb ファイル マネージャー PHP/jQuery ソリューションにもオープンです。フレームワークとして symfony を使用します。
更新:デフォルト フォルダーを、このように変更された新しいフォルダーに置き換えようとしまし__construct()
たupload.php
。
public function __construct() {
// SET CMS INTEGRATION PROPERTY
if (isset($_GET['cms']) &&
$this->checkFilename($_GET['cms']) &&
is_file("integration/{$_GET['cms']}.php")
)
$this->cms = $_GET['cms'];
// LINKING UPLOADED FILE
if (count($_FILES))
$this->file = &$_FILES[key($_FILES)];
// CONFIG & SESSION SETUP
$session = new session("conf/config.php");
$this->config = $session->getConfig();
$this->session = &$session->values;
$this->config["uploadURL"] .= $_GET["subDir"];
// IMAGE DRIVER INIT
if (isset($this->config['imageDriversPriority'])) {
$this->config['imageDriversPriority'] =
text::clearWhitespaces($this->config['imageDriversPriority']);
$driver = image::getDriver(explode(' ', $this->config['imageDriversPriority']));
if ($driver !== false)
$this->imageDriver = $driver;
}
if ((!isset($driver) || ($driver === false)) &&
(image::getDriver(array($this->imageDriver)) === false)
)
$this->backMsg("Cannot find any of the supported PHP image extensions!");
// WATERMARK INIT
if (isset($this->config['watermark']) && is_string($this->config['watermark']))
$this->config['watermark'] = array('file' => $this->config['watermark']);
// GET TYPE DIRECTORY
$this->types = &$this->config['types'];
$firstType = array_keys($this->types);
$firstType = $firstType[0];
$this->type = (
isset($_GET['type']) &&
isset($this->types[$_GET['type']])
)
? $_GET['type'] : $firstType;
// LOAD TYPE DIRECTORY SPECIFIC CONFIGURATION IF EXISTS
if (is_array($this->types[$this->type])) {
foreach ($this->types[$this->type] as $key => $val)
if (in_array($key, $this->typeSettings))
$this->config[$key] = $val;
$this->types[$this->type] = isset($this->types[$this->type]['type'])
? $this->types[$this->type]['type'] : "";
}
// COOKIES INIT
$ip = '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';
$ip = '/^' . implode('\.', array($ip, $ip, $ip, $ip)) . '$/';
if (preg_match($ip, $_SERVER['HTTP_HOST']) ||
preg_match('/^[^\.]+$/', $_SERVER['HTTP_HOST'])
)
$this->config['cookieDomain'] = "";
elseif (!strlen($this->config['cookieDomain']))
$this->config['cookieDomain'] = $_SERVER['HTTP_HOST'];
if (!strlen($this->config['cookiePath']))
$this->config['cookiePath'] = "/";
// UPLOAD FOLDER INIT
// FULL URL
if (preg_match('/^([a-z]+)\:\/\/([^\/^\:]+)(\:(\d+))?\/(.+)\/?$/',
$this->config['uploadURL'], $patt)
) {
list($unused, $protocol, $domain, $unused, $port, $path) = $patt;
$path = path::normalize($path);
$this->config['uploadURL'] = "$protocol://$domain" . (strlen($port) ? ":$port" : "") . "/$path";
$this->config['uploadDir'] = strlen($this->config['uploadDir'])
? path::normalize($this->config['uploadDir'])
: path::url2fullPath("/$path");
$this->typeDir = "{$this->config['uploadDir']}/{$this->type}";
$this->typeURL = "{$this->config['uploadURL']}/{$this->type}";
// SITE ROOT
} elseif ($this->config['uploadURL'] == "/") {
$this->config['uploadDir'] = strlen($this->config['uploadDir'])
? path::normalize($this->config['uploadDir'])
: path::normalize(realpath($_SERVER['DOCUMENT_ROOT']));
$this->typeDir = "{$this->config['uploadDir']}/{$this->type}";
$this->typeURL = "/{$this->type}";
// ABSOLUTE & RELATIVE
} else {
$this->config['uploadURL'] = (substr($this->config['uploadURL'], 0, 1) === "/")
? path::normalize($this->config['uploadURL'])
: path::rel2abs_url($this->config['uploadURL']);
$this->config['uploadDir'] = strlen($this->config['uploadDir'])
? path::normalize($this->config['uploadDir'])
: path::url2fullPath($this->config['uploadURL']);
$this->typeDir = "{$this->config['uploadDir']}/{$this->type}";
$this->typeURL = "{$this->config['uploadURL']}/{$this->type}";
}
// HOST APPLICATIONS INIT
if (isset($_GET['CKEditorFuncNum'])) {
$this->opener['name'] = "ckeditor";
$this->opener['CKEditor'] = array('funcNum' => $_GET['CKEditorFuncNum']);
} elseif (isset($_GET['opener'])) {
$this->opener['name'] = $_GET['opener'];
if ($_GET['opener'] == "tinymce") {
if (!isset($this->config['_tinyMCEPath']) || !strlen($this->config['_tinyMCEPath']))
$this->opener['name'] = false;
} elseif ($_GET['opener'] == "tinymce4") {
if (!isset($_GET['field']))
$this->opener['name'] = false;
else
$this->opener['TinyMCE'] = array('field' => $_GET['field']);
}
} else
$this->opener['name'] = false;
// LOCALIZATION
foreach ($this->langInputNames as $key)
if (isset($_GET[$key]) &&
preg_match('/^[a-z][a-z\._\-]*$/i', $_GET[$key]) &&
file_exists("lang/" . strtolower($_GET[$key]) . ".php")
) {
$this->lang = $_GET[$key];
break;
}
$this->localize($this->lang);
// IF BROWSER IS ENABLED
if (!$this->config['disabled']) {
// TRY TO CREATE UPLOAD DIRECTORY IF NOT EXISTS
if (!$this->config['disabled'] && !is_dir($this->config['uploadDir']))
@mkdir($this->config['uploadDir'], $this->config['dirPerms'], true);
// CHECK & MAKE DEFAULT .htaccess
if (isset($this->config['_check4htaccess']) &&
$this->config['_check4htaccess']
) {
$htaccess = "{$this->config['uploadDir']}/.htaccess";
$original = $this->get_htaccess();
if (!file_exists($htaccess)) {
if (!@file_put_contents($htaccess, $original))
$this->backMsg("Cannot write to upload folder. {$this->config['uploadDir']}");
} else {
if (false === ($data = @file_get_contents($htaccess)))
$this->backMsg("Cannot read .htaccess");
if (($data != $original) && !@file_put_contents($htaccess, $original))
$this->backMsg("Incorrect .htaccess file. Cannot rewrite it!");
}
}
// CHECK & CREATE UPLOAD FOLDER
if (!is_dir($this->typeDir)) {
if (!mkdir($this->typeDir, $this->config['dirPerms']))
$this->backMsg("Cannot create {dir} folder.", array('dir' => $this->type));
} elseif (!is_readable($this->typeDir))
$this->backMsg("Cannot read upload folder.");
}
}
これにより、ディレクトリとすべてが作成されますが、ルートフォルダーが新しく作成されたフォルダーに設定されません。フォルダはデフォルトのルートに設定されたままです。