Javascript PHP包含包含相对路径的html文件
我有一个html文件,它本身运行良好。html文件包含一些相对路径 当我在php中包含html文件时,我遇到了相对路径的问题 chart.html文件的脚本src如下所示: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的路径缺
<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
}