为什么我的PHP代码看不到$ _SERVER ['PHP_SELF']?

时间:2019-11-24 03:11:11

标签: php

我目前正在重组一些代码-和文件扩展名-并且我无法理解为什么此代码不再起作用,只是因为我更改了文件扩展名。我对PHP还是比较陌生,但是对HTML和CSS有相当的经验。显然我对文件扩展名和/或HTML中的PHP文件不了解。

这是我的情况。我有一个名为contact.php的文件,它是HTML,只有几个PHP include语句可将各种片段嵌入到我的网页中。我的其中一项包括:

这是页脚片段,该片段包含在网站的每个页面中:

<br>
<div id="footer">
<div class="row">
<div class="col" id="updated">
<?php include '%WestownFunctions.php'; ?>
<?php getLastUpdate(); ?>
</div id="updated">
<div class="col" id="copyright">
<?php getCopyright(); ?>
</div id="copyright">
</div class="row">
</div id="footer">

依次是%Westown.Functions.php:

<?php

function getLastUpdate() {

    $filename = $_SERVER['PHP_SELF'];
    echo "getLastUpdate() filename: " . $filename . " "; //temporary!
    date_default_timezone_set('America/Toronto');
    echo "This page, " . substr($filename,1) . ", was last updated on: " . date('M j Y \a\t H:i:s T.', getlastmod());
}

function getCopyright() {

    $filename = $_SERVER['PHP_SELF'];
    echo "getCopyright() filename: " . $filename . " "; //temporary!
    date_default_timezone_set('America/Toronto');
    echo "(c) " . date('Y', getlastmod()) . " - Westown";   
}

?>

这一切都很好,就像这样:页面正确显示,包括页脚所需的所有内容。

我所做的更改是用服务器端包含替换contact.php中的PHP包含,使它们看起来都像这样:

<!--#include file='fragments/_footer.shtml' -->

我将 ALSO 重命名为contact.php,改为contact.html。

服务器端的工作正常,但有一个障碍:%WestownFunctions.php中的两个函数显然看不到$ _SERVER [PHP_SELF],因为当我在两个函数中都将$ filename变量回显时,它为空。我不明白为什么会遇到这种情况:%WestownFunctions.php 一个PHP文件,而我所做的更改只是contact.php文件的文件扩展名和包含类型我在做。

有人可以解释我为什么遇到这个问题吗?

我知道一条古老的规则,说“如果某些东西行得通,那就不要解决”,但我正在尽力使代码尽可能遵循专业标准。我的印象是,不包含PHP的HTML文件具有.html扩展名是“更好”的选择。我设法通过使用SSI而不是PHP include来从原始contact.php中删除所有PHP,因此现在将文件扩展名更改为.html [在问题的原始版本中为“ .php”似乎很合逻辑,但这是不是我的意思]。但是这样做显然会破坏在包含的页面上调用的PHP。我应该将contact.html重命名回contact.php吗?我应该还原PHP包含而不是使用SSI吗?

1 个答案:

答案 0 :(得分:1)

SSI将简单地提取文件并假定它是HTML的一部分;该文件中的所有PHP标记(即使以扩展名.php命名)也将按原样提供给浏览器,服务器不会将其解释为PHP。

tl; dr:您需要放回PHP include