我正在做一些非常简单的事情,我想了解为什么有些文件路径引用有效,而另一些则无效。我的测试代码如下:
<?php
$menu1 = 'c:/xampp/htdocs/data/sc01/includes/menu.php';
$menu2 = 'http://localhost/data/sc01/includes/menu.php';
$test1 = 'http://localhost/data/sc01/css/style.css';
$test2 = 'c:/xampp/htdocs/data/sc01/css/style.css';
$test3 = 'css/style.css';
echo $test1; echo "<br>";
echo $test2; echo "<br>";
echo $test3; echo "<br>";
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="<?php echo $test2; ?>">
<link rel="stylesheet" href="css/font-awesome.min.css">
<title>Index</title>
</head>
<body>
<div id="container">
<?php include "$menu1"; ?>
<h1>Welcome to our site!</h1>
<p>This is a test coment</p>
</div>
</body>
<div class="footer-container">
<?php include "c:/xampp/htdocs/data/sc01/includes/footer.php"; ?>
</div>
</html>
我的问题:
- 在引用css文件的头部分:$test1有效,$test2无效,$test3有效。在检查这些的echo语句中,所有路径似乎都验证正确。为什么会这样?-我会认为所有这些都应该有效吗
- 在访问导航菜单的容器部分,$menu1工作,$menu2不工作-给出PHP错误。为什么会这样?-我会认为所有这些都应该有效吗
- 在包含菜单代码中?php包含"$menu1"?,双引号有效。但是单引号"$menu1"不起作用,但我认为单引号或双引号应该会产生相同的结果。为什么会这样
提前感谢!
以c:
开头的字符串都不是有效的URL,因此不能在HTML中的href
或src
属性中使用它们。您可以在PHP include
行中使用它们,因为这些行是由服务器处理的,并且它允许参数为本地文件名。
<?php include '$menu1' ?>
不起作用,因为PHP只在双引号字符串中扩展变量,而不是在单引号字符串中。这就像之间的区别
echo "$menu1";
和
echo '$menu1';
第一个将回显变量的值,第二个将从字面上回显$menu1
。
通过http://
包含和通过文件系统路径包含是两件截然不同的事情——第一件只会获得脚本的输出,而第二件包括文件的代码然后在主脚本的范围内运行它。
在包含菜单代码
<?php include "$menu1"; ?>
中,双引号起作用。但是单引号"$menu1"不起作用,但我认为单引号或双引号应该会产生相同的结果。为什么会这样?
因为你"思考"而不是阅读语法的基本知识。所以现在就去解决这个问题:http://www.php.net/manual/en/language.types.string.php
D.3当然,假设通过HTTP请求文件意味着它首先由web服务器通过PHP解释器,但通常是这样。