php href文件引用标题部分中的混淆

时间:2014-04-22 21:03:35

标签: php href filepath

我正在做一些非常简单的事情,并希望了解为什么某些文件路径引用有效而其他文件路径引用无效。我的测试代码如下:

<?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>

我的问题:

  1. 在标题部分引用css文件:$ test1工作,$ test2不起作用,$ test3工作。在echo语句中检查这些,所有路径似乎都正确验证。为什么是这样? - 我原以为所有这些都应该有用吗?
  2. 在容器部分访问导航菜单,$ menu1工作,$ menu2没有 - 给出PHP错误。为什么是这样? - 我原以为所有这些都应该有用吗?
  3. 在include菜单代码中,?php包含“$ menu1”; ?,双引号工作。但单引号'$ menu1'不起作用,但我认为单引号或双引号应产生相同的结果。这是为什么?
  4. 提前致谢!

2 个答案:

答案 0 :(得分:0)

c:开头的所有字符串都不是有效的网址,因此您无法在HTML中的hrefsrc属性中使用它们。您可以在PHP include行中使用它们,因为它们由服务器处理,并且它允许参数为本地文件名。

<?php include '$menu1' ?>

不起作用,因为PHP只扩展双引号字符串中的变量,而不是单引号字符串。这就像是:

之间的区别
echo "$menu1";

echo '$menu1';

第一个将回显变量的值,第二个将逐字回显$menu1

答案 1 :(得分:0)

包括via http:// vs via文件系统路径是两个截然不同的东西 - 第一个只能获取脚本¹的输出,而第二个包含该文件的代码,然后在主脚本的范围内运行它。

  

在包含菜单代码<?php include "$menu1"; ?>中,双引号有效。但单引号'$ menu1'不起作用,但我认为单引号或双引号应产生相同的结果。这是为什么?

因为你“思考”而不是阅读语法的基础知识。所以现在就解决这个问题:http://www.php.net/manual/en/language.types.string.php


¹当然,假设通过HTTP请求文件意味着它首先由Web服务器通过PHP解释器,但通常就是这种情况。