我有一个标题为include的页面,只有当当前页面的文件名包含某个单词时,include才需要更改电话号码。
通常情况下,对于不在include中的更改,下面的代码会起作用。
<?php if (strpos($_SERVER['REQUEST_URI'],'example-match') !== false)
{
echo '555-555-5555';
}
else
{
echo '1-800-555-5555';
}
?>
但是,由于代码位于页面上的包含文件中,而不是原始页面本身,因此服务器将返回该包含文件的名称。
示例:www.Example.com/im-on-this-page.html返回include的名称。php文件位于-www.Example.com/header-include.php。
有没有办法从include中的代码中获取include"包含在"上的页面的URL,而不是include的URL?
更新:
该文件是通过Javascript包含的,因为它包含的页面是一个html文件:
<script>
$('#Header').load('/includes/header.php');
</script>
截至您的最后一条评论:
然后它不是include,而是对PHP的GET
请求,该请求将传递JavaScript。然后,给定的URL是正确的。为了找出脚本包含的位置,您可以查找referer
标头(不稳定),也可以将当前文件传递给脚本本身:
<script> $('#Header')
.load('/includes/header.php?from=encodeUriComponent("<?php echo $_SERVER['REQUEST_URI'] ?php>")'); </script>
在脚本中,使用$_GET['from']
而不是$_SERVER['REQUEST_URI']
正如评论者所提到的。这是不正确的。$_SERVER
在脚本(包括)的持续时间内不会发生更改。包含一个文件不会改变它。
javascript include,这意味着它实际上是由客户端通过ajax调用调用的,并且在页面显示之前不包含在服务器上。(你加载一页,然后加载另一页,在第一页的某个地方"打印")
一个快速而肮脏的修复方法是在第一个php文件上沿着这些行写一些东西
<?php if (strpos($_SERVER['REQUEST_URI'],'example-match') !== false)
{
echo "<script> var phone_number = '555-555-5555';</script>";
}
else
{
echo "<script> var phone_number = '1-800-555-5555';</script>";
}
?>
它将在客户端创建一个变量,然后您可以从加载的页面调用该变量作为javascript变量