Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP包含包含相对路径的html文件_Javascript_Php_Html_Relative Path - Fatal编程技术网

Javascript PHP包含包含相对路径的html文件

Javascript PHP包含包含相对路径的html文件,javascript,php,html,relative-path,Javascript,Php,Html,Relative Path,我有一个html文件,它本身运行良好。html文件包含一些相对路径 当我在php中包含html文件时,我遇到了相对路径的问题 chart.html文件的脚本src如下所示: <script src="./data/data.js"></script> include('./chart/chart.html'); 我在浏览器中遇到的错误在以下方面失败: X GET http://localhost/project/data/data.js 显然data.js的路径缺

我有一个html文件,它本身运行良好。html文件包含一些相对路径

当我在php中包含html文件时,我遇到了相对路径的问题

chart.html文件的脚本src如下所示:

<script src="./data/data.js"></script>
include('./chart/chart.html');
我在浏览器中遇到的错误在以下方面失败:

X GET http://localhost/project/data/data.js 
显然data.js的路径缺少图表文件夹。应该是这样的:
http://localhost/project/chart/data/data.js

以下是我的文件夹层次结构:

Sites/
  project/
    index.php
    chart/
        chart.html
        data/
           data.js
我知道我可以修改html文件并将图表添加到路径中,但这会使html文件本身无法查看。基本上,html文件假定路径基于当前的chart.html相对路径。
那么,让php包含这个html文件而不破坏相对路径的正确方法是什么呢

这里的问题是绝对路径和相对路径之间的差异。通过将其包含到其他路径中,有效地更改
chart.html
的路径,但不更改依赖文件的相对路径,就可以中断代码

有一个基本标签,你可以放在头上。但是,这可能会让事情变得更糟,因为您的
index.php
可能包含的其他内容将不再有效,除非这些内容使用绝对路径。如果你不这样做,这可能是一个很好的解决方案

第二种解决方案可能是(以编程方式)在html中搜索相对路径,并动态地用更正的路径替换这些路径。在html中使用javascript的一些奇怪的情况下,可能会有一些“反拷贝”保护js代码,这可能会让它窒息

第三种解决方案(当然取决于您的用例)是,不包括html,而是在输出中放置一个
iframe
,在那里您可以指向正确的路径。因为它是从正确的路径加载的,所以相对路径应该再次工作。(我更喜欢这个,特别是如果你想要的是某种“预览”功能的话)


另一个解决方案是将另一个
index.php
放入图表文件夹,通过包含(并使原始
index.php
s代码足够灵活)将完成与原始index.php相同的工作,但由于它是从不同的路径请求的,所以一切都很好

另一种方法是URL重写,您可以使其看起来像index.php在图表目录中一样(可能需要从原始调用重定向)。URL重写可能很困难,这取决于您的总体设置

这些是我的建议,但是,根据您对项目的实际需要,可能会有更合适的解决方案

更新到额外的
index.php
解决方案:

请注意,这只适用于一次显示一个项目,而不是同时显示多个项目。这在很大程度上取决于
index.php
的功能或工作方式。让我假设它看起来像这样:

<?php
$project = !empty($_POST['project']) ? $_POST['project'] : '';
$projects = array('chart', 'otherproject');
if(in_array($project, $projects)) {
    include $project.'/'.$project.'.html';
}
foreach($projects as $p) {
    echo '<a href="?project='.$p.'">'.$p.'</a>';
}
您需要将原来的
/index.php
更改为:

<?php
$project = !empty($project) ? $project : '';                   // <-- changed
$projects = array('chart', 'otherproject');
if(in_array($project, $projects)) {
    include $project.'/'.$project.'.html';
}
foreach($projects as $p) {
    echo '<a href="/URL/TO/ROOT/'.$p.'/index.php">'.$p.'</a>'; // <-- changed
}

为什么不改用绝对URL?试试
。从错误中,我猜
php
脚本开始从当前工作目录中查找,因此您得到了一个错误。@VivekPradhan您提出的解决方案将破坏所需的独立
chart.html
文件的功能。我想这只不过是一个旁注,PHP中的
include
是一种语言结构,而不是函数。因此,语法不是
include($\u SERVER['DOCUMENT\u ROOT'..]./chart/chart.html')(带括号),但
包括$\u服务器['DOCUMENT\u ROOT']./chart/chart.html'(不带括号)。另一种解决方案是将另一个index.php放入图表文件夹,通过包含(并使原始index.phps代码足够灵活)将完成与原始index.php相同的工作,但当从不同路径请求时,一切正常。-->你能详细说明一下吗?如果可行的话,这是最好的主意。我试过了,但是chart文件夹中的index.php应该仍然包括chart.html作为./chart/chart.html。新的index.php不知道它位于chart.html旁边。@apadana同样,您可以使用相对于根目录而不是当前目录的路径
包含
<?php
$project = !empty($project) ? $project : '';                   // <-- changed
$projects = array('chart', 'otherproject');
if(in_array($project, $projects)) {
    include $project.'/'.$project.'.html';
}
foreach($projects as $p) {
    echo '<a href="/URL/TO/ROOT/'.$p.'/index.php">'.$p.'</a>'; // <-- changed
}