当包含指向许多外部JS的PHP页面时,会出现相对地址问题
我有一个指向许多外部JavaScript文件的PHP页面(让我们把它命名为myJS.PHP) 我想把它包括在许多不同的PHP页面中,在不同的文件夹中 问题是,当我在不同文件夹的页面中包含myJS.php时,myJS.php的所有JS文件都会获得相对地址 例如:如果myJS.php中有类似于src=“main/calendar.js”的内容,当我将myJS.php包含在不同文件夹的php页面中时,它将更改为src=“subfolder1/subfolder2/main/calendar.js” 这个问题有什么解决办法吗 提前感谢。当包含指向许多外部JS的PHP页面时,会出现相对地址问题,php,javascript,include,Php,Javascript,Include,我有一个指向许多外部JavaScript文件的PHP页面(让我们把它命名为myJS.PHP) 我想把它包括在许多不同的PHP页面中,在不同的文件夹中 问题是,当我在不同文件夹的页面中包含myJS.php时,myJS.php的所有JS文件都会获得相对地址 例如:如果myJS.php中有类似于src=“main/calendar.js”的内容,当我将myJS.php包含在不同文件夹的php页面中时,它将更改为src=“subfolder1/subfolder2/main/calendar.js” 这
- 绝对URI
- 绝对路径(即相对于站点根的URI(从
开始)/
- 在所有URL前面加上
,您可以从$base
或硬代码计算这些URL$\u服务器['REQUEST\u URI']
- 绝对URI
- 绝对路径(即相对于站点根的URI(从
开始)/
- 在所有URL前面加上
,您可以从$base
或硬代码计算这些URL$\u服务器['REQUEST\u URI']
$url = ($_SERVER['HTTPS'] ? "https://" : "http://") . $_SERVER['HTTP_HOST'] . '/mypath/myfile.bla';
您可能希望var_dump或r_打印$_服务器变量,以查看哪些属性可用于构建绝对url。
但是正如@Quentin所提到的-不要太难,你可以用斜杠开始你的路径,斜杠引用你网站的根,就像
/mypathfromroot/myfile.bla
与myrelativepath/myfile.bla相反,你可以生成一个绝对url:
$url = ($_SERVER['HTTPS'] ? "https://" : "http://") . $_SERVER['HTTP_HOST'] . '/mypath/myfile.bla';
您可能希望var_dump或r_打印$_服务器变量,以查看哪些属性可用于构建绝对url。
但是正如@Quentin所提到的-不要太难,你可以用斜杠开始你的路径,斜杠引用你站点的根,就像/mypathfromroot/myfile.bla
与myrelativepath/myfile.bla相反,完整的解决方案可能是这样的:
define('IS_WINDOWS', (stripos(PHP_OS,'WIN') === 0));
$webserver_root = dirname(dirname(__FILE__));
if (IS_WINDOWS) {
//convert windows path separators
$webserver_root = str_replace("\\","/",$webserver_root);
}
$web_root = substr($webserver_root, strlen($_SERVER['DOCUMENT_ROOT']));
// Ensure web_root starts with a path separator
if (preg_match("/^[^\/]/",$web_root)) {
$web_root = "/".$web_root;
}
$host = ($_SERVER['HTTPS'] ? "https://" : "http://") . $_SERVER['HTTP_HOST'];
$path = $host.$web_root.'/bla/bla';
如果您目前正在使用localhost(在windows计算机上),请首先检查PHP_OS,然后创建绝对路径并将其用于外部JS。可能完整的解决方案如下所示:
define('IS_WINDOWS', (stripos(PHP_OS,'WIN') === 0));
$webserver_root = dirname(dirname(__FILE__));
if (IS_WINDOWS) {
//convert windows path separators
$webserver_root = str_replace("\\","/",$webserver_root);
}
$web_root = substr($webserver_root, strlen($_SERVER['DOCUMENT_ROOT']));
// Ensure web_root starts with a path separator
if (preg_match("/^[^\/]/",$web_root)) {
$web_root = "/".$web_root;
}
$host = ($_SERVER['HTTPS'] ? "https://" : "http://") . $_SERVER['HTTP_HOST'];
$path = $host.$web_root.'/bla/bla';
如果您目前正在使用localhost(在windows计算机上),请首先检查PHP_OS,然后创建绝对路径并将其用于外部JS。我想知道类似的内容在某种程度上是否有用。@jordojuice-不会,因为浏览器正在解释URI,不是PHP。我想知道类似的东西在这里是否在某种程度上有用。@jordojuice-不会,因为浏览器正在解释URI,而不是PHP。Erik,谢谢你的回答,我添加了一些行并找到了一个解决方案,我会将我的最终解决方案作为答案发布,这样其他人可能会发现它有用。Erik,谢谢你的回答,我又添加了几行,找到了一个解决方案,我将把我的最终解决方案作为答案发布,这样其他人可能会发现它很有用。从服务器上的物理路径生成URL时要小心。它们并不总是匹配的。大多数Web服务器允许将给定URL的请求映射到完全不同物理位置的文件。apache Web服务器的mod_rewrite模块就是一个例子。Web服务器可以将URL/includes/js/myscript.js
重新映射到/includes/scanned/minified/merged/myscript.js
。从服务器上的物理路径生成URL时要小心。它们并不总是匹配的。大多数Web服务器允许将给定URL的请求映射到完全不同物理位置的文件。apache Web服务器的mod_rewrite模块就是一个例子。Web服务器可以将URL/includes/js/myscript.js
重新映射到/includes/scanned/minified/merged/myscript.js
。