当包含指向许多外部JS的PHP页面时,会出现相对地址问题

当包含指向许多外部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” 这

我有一个指向许多外部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
    ,您可以从
    $\u服务器['REQUEST\u URI']
    或硬代码计算这些URL
      • 绝对URI
      • 绝对路径(即相对于站点根的URI(从
        /
        开始)
      • 在所有URL前面加上
        $base
        ,您可以从
        $\u服务器['REQUEST\u URI']
        或硬代码计算这些URL

      您可以生成一个绝对url:

      $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