2

問題: 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.");
    }
}

これにより、ディレクトリとすべてが作成されますが、ルートフォルダーが新しく作成されたフォルダーに設定されません。フォルダはデフォルトのルートに設定されたままです。

4

1 に答える 1

0

ここで答えを探している人のために、EMElfinderBundle と呼ばれる Symfony バンドルを使用する代替ソリューションを思いつきました。これは、KCFinder がコード全体で変数を使用$_GETしており、おそらくどこでも変数を変更できなかったためです。このバンドルは、実際には kcfinder よりも優れたバンドルであることが判明しました。Symfony を使用している人には、これをお勧めします。

バンドルでは、次の行を次の行に追加するだけでしたElFinderConfigurationReader.php

$dir="";
parse_str(parse_url($this->requestStack->getCurrentRequest()->server->all()["HTTP_REFERER"])["query"]);
$driverOptions["path"] .= $dir;
于 2015-08-05T21:03:31.750 に答える