如何使用include()使相对文件路径工作?

时间:2016-07-14 16:18:01

标签: javascript php html

我正在网站上工作,我的文件结构的相关部分是:

  • 站点
      • 的Class1
    • JS​​

现在,js包含使用同一文件夹中的其他脚本的脚本。我可以在php页面上正确加载脚本的唯一方法是将整个js文件夹复制到相关的子文件夹中,或者将页面移动到站点文件夹。这两种选择都不好 我知道问题在于文件路径,所以如何将js脚本中的包含到相对于其位置的路径,而不是php页面的位置?

这方面的一个例子:
我在class1中有一个名为class1home.php的页面 它调用一个名为script.js的js脚本 script.js包含一个包含(script2.js)的函数,该函数位于js文件夹中 由于路径,include正在寻找site / classes / class1 / script2.js 我想要它去site / js / script2.js。

因为有多个文件夹和脚本使用script2.js,所以我不能只将include中的文件路径更改为相对于该特定页面。

在script.js中:

/**
 * @function      Include
 * @description   Includes an external scripts to the page
 * @param         {string} scriptUrl
 */
function include(scriptUrl) {
    document.write('<script src="' + scriptUrl + '"></script>');
}  

使用它的一个地方(在script.js中):

/**  
* @module       ToTop  
* @description  Enables ToTop Plugin  
*/  
(function ($) {
    var o = $('html');
    if (o.hasClass('desktop')) {
        include('js/jquery.ui.totop.min.js');

        $(document).ready(function () {
            $().UItoTop({
                easingType: 'easeOutQuart',
                containerClass: 'ui-to-top fa fa-angle-up'
            });
        });
    }
})($);

1 个答案:

答案 0 :(得分:0)

我通常通过让页面通过调用Server来识别它的位置来解决这类问题。它看起来像这样:

$callingPageURL =$_SERVER['SCRIPT_FILENAME'];

然后,我使用explode函数解析该字符串以确定文件和文件夹。它看起来像这样:

$callingPageURLHolder = explode("/", $callingPageURL);

这会将一组值加载到callingPageURLHolder中。从那里,我使用常见的数据结构方法,如数组弹出,来获取我认为将与该程序相关的URL部分。它看起来像这样:

$callingPageFile = array_pop($callingPageURLHolder);
$callingPageFolder = array_pop($callingPageURLHolder);

一旦你可以解析从服务器返回的数组,你可以简单地加载你需要连接到你将在include中调用的URL的变量。

通过添加一些测试这些提取值的流控制,可以使用这种相同类型的技术根据模板页面的包含位置对模板页面进行小的更改。

例如,

    switch ($callingPageFile){
    case "index.php":
    // some response
        break;
 }

使用这样的逻辑,我可能会建立一系列案例,我会在其中回应预期的URL部分。当我想稍微定制PHP页面时,我使用这种类型的代码。使用这些技术和一些规划,您可能会回应您打算将代码移植到各种地方的想法。