Dino's
ソリューションは非常に健全なようで、実際に のファイルで機能しましapplication
たが、もう少し深いソリューションが必要でした。私たちの CI は、メイン ディレクトリのサブディレクトリに埋め込まれていip.ip.ip.ip/dir/sub/application/..
ます。おそらく私は何か間違ったことをしていましたが、彼のソリューションを私のニーズに合わせてまったく機能させることができませんでした../../
。不明なバック ディレクトリ カウントをさらに深く調べる必要がある場合はどうすればよいですか?
したがって、私は独自のソリューションを作成することになりました。これまでのところ、バニラPHPを利用しているため、うまく機能しているようです。このようにして、CI のロード機能とほとんど同じように、ファイルが置かれているベース ディレクトリを取得してロードしようとします。
彼の解決策と同じように、application/core
namedにファイルを作成しますMY_Loader.php
。次に、次のように記述します(または、彼のソリューションも保持したい場合は、メソッドを追加するだけです)。
<?php
class MY_Loader extends CI_Loader {
public function base_view($view, $vars = array(), $get = FALSE) {
// ensures leading /
if ($view[0] != '/') $view = '/' . $view;
// ensures extension
$view .= ((strpos($view, ".", strlen($view)-5) === FALSE) ? '.php' : '');
// replaces \'s with /'s
$view = str_replace('\\', '/', $view);
if (!is_file($view)) if (is_file($_SERVER['DOCUMENT_ROOT'].$view)) $view = ($_SERVER['DOCUMENT_ROOT'].$view);
if (is_file($view)) {
if (!empty($vars)) extract($vars);
ob_start();
include($view);
$return = ob_get_clean();
if (!$get) echo($return);
return $return;
}
return show_404($view);
}
}
次に、最も内側のルート ディレクトリに「bob.php」という名前のファイルがある場合は、次のように呼び出します。
$this->load->base_view('bob');
// OR
$this->load->base_view('bob.php');
// OR if it's extension is .html
$this->load->base_view('bob.html');
ベースルートの別のディレクトリにある場合:
$this->load->base_view('directory/bob');
// OR
$this->load->base_view('directory\bob.htm');
または、実際のディレクトリ内の実際のファイルを呼び出す限り、好きなようにできます!
この代替ソリューションが、同様の危険にさらされている人に役立つことを願っています。