web-dev-qa-db-ja.com

ベースパス/ URLの取得

../folder1/folder2/mypage.php../../../folder1/folder2/somepage.phpのようなパスを見つけたくないので、関数を介してドキュメントのベースパスを取得しようとしています。

したがって、私は試しました...

function getBaseUrl() {
// output: /myproject/index.php
$currentPath = $_SERVER['PHP_SELF'];

// output: Array ( [dirname] => /myproject [basename] => index.php [extension] => php [filename] => index )
$pathInfo = pathinfo($currentPath);

// output: localhost
$hostName = $_SERVER['HTTP_Host'];

// output: http://
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';

// return: http://localhost/myproject/
return $protocol.$hostName.$pathInfo['dirname']."/";
}

それから私はコードを書いてあげます...

$base = getBaseUrl();
require_once $base.'_include/db/qry.php';
require_once $base.'_include/db/functions.php';

qry.phpfunctions.phpの両方のファイルはhttp://localhost/mysite/_include/db/にあります

ページを実行している間、エラーが表示されます...

Warning: require_once(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\xampp\htdocs\mysite\_include\header.php on line 9

Warning: require_once(http://localhost/mysite/_include/db/qry.php): failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\mysite\_include\header.php on line 9

Fatal error: require_once(): Failed opening required 'http://localhost/mysite/_include/db/qry.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\mysite\_include\header.php on line 9

echo $base;のようにgetBaseUrl()をエコーし​​てみましたが、正しいパス、つまりhttp://localhost/mysite/が表示されています。

私は何をすべきか ?

4
Raja

$_SERVER['DOCUMENT_ROOT']を使用できます

11
krozero

URLの代わりにサーバーの絶対パスを使用する必要があります。

__DIR__を使用してベースパスを取得できます。

例えば:

// just example, change to fit your real path.
$base = __DIR__ . '/../';

require_once $base.'_include/db/qry.php';
require_once $base.'_include/db/functions.php';
9
xdazz