如果存在index.php,则显示“this”,否则显示“this”。

5

非常希望有人能帮忙解决这个问题。我是PHP的新手。我尝试通过教程自学,但一直没有找到合适的。

基本上,我想要实现一个“如果是index.php页面,则显示foo,如果不是,则显示bar”。

有什么想法吗?

我希望我解释得足够清楚......

index.php包含一个侧边栏:

require_once('./cache/templates/sidebar.php');

每个后续页面都是使用此index.php文件中定义的内容构建的,这意味着sidebar.php是必须的。
我想编辑sidebar.php,包含一个仅在首页显示的广告。
目前,当我编辑sidebar.php时,例如,显示字母"B",它会在主页上显示,并在每个其他页面上显示如下;
主页:http://img.photobucket.com/albums/v684/nilsatis/1stack.jpg 其他每个页面:http://img.photobucket.com/albums/v684/nilsatis/2stack.jpg 如何指定包含文件的一个区域只在一个页面上显示,但不显示在其他页面上?
任何帮助都将非常感激。

[编辑] 这是相关网站: www.grandoldteam.com。您可以看到我在侧边栏.php中输入了“测试”文本。我希望这段文本(未来广告)仅出现在主页上,其他地方不要有。

[编辑2] 这是在index.php文件中调用sidebar.php的位置;

<p class="page_desc">'.$PAGE['subtitle'].'</p>
' );
            }

            if (isset($url[1])) require_once('./cache/html/'.$url[0].'/'.$url[1].'.php');
            else require_once('./cache/html/'.$url[0].'.php');
        }
    }

    require_once('./cache/templates/sidebar.php');



}


require_once('./cache/templates/footer.php');

这是我可以编辑sidebar.php以显示所需文本的位置;

<div class="clear"></div>
test
        </div>
<p>
    </div>

2
如果我理解正确,您可以这样做:如果 $_SERVER['PHP_SELF'] == 'index.php',则执行此操作,否则执行那个操作。伪代码 - Jatin Dhoot
顺便说一下,对于新手来说,这个链接非常有价值:http://php.net/manual/en/reserved.variables.server.php - Jatin Dhoot
1
你如何知道要加载哪个页面?我猜你使用了某种 $_GET 变量。你应该检查它是否为空或其他情况。如果你提供更多细节,我们可以做得更好。 - kapa
6个回答

11

如果想要按照你的方式实现,可以使用$_SERVER超全局变量。脚本名称可以在多个地方找到。

if (strpos($_SERVER['SCRIPT_NAME'], 'index.php') !== false) // index page...

另外一个选择是在index.php中设置一些变量(例如$show_ad),然后包含侧边栏页面时检查该变量。


2
使用 $_SERVER['SCRIPT_NAME']。不要使用 __FILE__。如果在 sidebar.php 文件内使用,__FILE__ 将返回侧边栏脚本的文件名,而非 index.php。 - Michael Berkowski
非常感谢您的帮助。很抱歉我不理解第一个解决方案。我该如何设置$show_ad? - Dan

2

我不建议获取调用脚本的名称,因为不同文件夹中的多个页面可能具有相同的名称,而且您将来可能想要更改页面名称。

使用一个全局变量或常量来表示调用者是哪个页面。

index.php:

<?php
  $GLOBALS['caller_page'] = 'index';
  require_once('./cache/templates/sidebar.php');
  ...

sidebar.php:

<?php
  ... 
  if ( isset($GLOBALS['caller_page']) && ($GLOBALS['caller_page']=='index') ) {
    ... // special action for the index page 
  }
  ...

@Dan:你需要根据代码片段进行适应,但是我对此了解甚少,无法提供更多细节。我的“特殊操作”可能指的是你的“<div class='clear'></div>test</div><p></div>”,然而你的代码片段似乎不完整。同样的情况也出现在我的“require_once”中,由于非结构化的IF语句,你相应的代码片段也不完整。 - Skrol29

1

试试这个替代方案:

在你只想显示“foo”的页面上创建一个会话。

然后执行以下操作:

if ($_SESSION['valid']) {

//if the session is present, then show

}

else {

//if not,

}

这不仅是更好的操作方式,因为如果您的文件名更改会发生什么?这样就无关紧要了,因为它根据会话进行检查,而不是可能更改的内容:)


1
if条件中缺少引号 :) - Jatin Dhoot
这似乎没有起作用,虽然我可能做错了什么?这是在index.php文件中调用sidebar.php的位置;<p class="page_desc">'.$PAGE['subtitle'].'</p> ' ); } if (isset($url[1])) require_once('./cache/html/'.$url[0].'/'.$url[1].'.php'); else require_once('./cache/html/'.$url[0].'.php'); } } require_once('./cache/templates/sidebar.php');}require_once('./cache/templates/footer.php');这是我可以编辑sidebar.php以显示所需文本的部分; <div class="clear"></div> test </div> <p> </div> - Dan
编辑你的回答,这样我就能看到它了,伙计。我会尽力帮你解决的。 - Version1
谢谢 - 仍然没有成功!如果你有时间,能否用白痴指南的方式详细说明一下?非常感激。 - Dan
没问题,把完整的细节发邮件给我,我的邮箱是carlv1@live.co.uk,我会尽力帮你解决的 :) - Version1

1

所有这些答案都很好,但我提供了一种不同的做法。它并不更好,但在我的感觉中更加舒适。

当你这样做时:

require_once('./cache/templates/sidebar.php');

在index.php中,改为这样做:

require_once('./cache/templates/sidebar.php?ad=1');

现在,在sidebar.php中添加以下内容:

if(isset($_GET['ad'])&& $_GET['ad']=='1')
 // display ad

else
//don't display ad

编辑:

你想要可用的代码,好的...

假设你的广告实际上是stackoverflow标志的图像:

现在在sidebar.php中,你会有类似这样的东西:

<?php
....


if(isset($_GET['ad'])&& $_GET['ad']=='1')
  {
 ?>
<div>
<a href="http://stackoverflow.com">
<img src="http://blog.vicompany.nl/wp-content/uploads/2011/04/stackoverflow-logo-250.png" alt="ad"/>
</a>
</div>
<?php

} 

else
{
}

....
?>

你的意思是“它显示了实际的代码”?你是否已经安装并运行了PHP?你是否用PHP <?php ?>标签包裹了它? - fingerman
好的,"//"是注释符号 - 它不会执行任何操作...你需要在那里放置广告的代码... http://php.about.com/od/learnphp/qt/php_comments.htm - fingerman
我觉得你误解了我的意思。使用你更新的例子,你可以在这里看到文件编辑 http://img.photobucket.com/albums/v684/nilsatis/1s.jpg 和 http://img.photobucket.com/albums/v684/nilsatis/2s.jpg 。这些文件编辑导致网站变得混乱,就像这样 http://img.photobucket.com/albums/v684/nilsatis/3s.jpg - 它应该看起来像这个网站 www.grandoldteam.com 。在输入评论之前和输入评论时都是如此。希望这样说得清楚吗?感谢您的帮助。 - Dan
这应该可以运行...我真的不明白你做错了什么。 - fingerman
有什么我可以做来协助故障排除吗?我已经提供了编辑的截图 - 不确定还能提供什么其他信息? - Dan
显示剩余6条评论

0

如何解决:

在sidebar.php的顶部添加以下行:

print_r($_SERVER);

这将显示$_SERVER变量的全部内容。从中,您应该看到可以使用的许多候选项,以及在某些时候可能对您有用的其他内容。

一旦您决定要使用什么,您需要检查它是否包含字符串index.php。一个好的方法是使用:

if (strpos($_SERVER['SCRIPT_NAME'], 'index.php') !== false) {

}

这句惯用语检查字符串“index.php”在脚本名称中的位置是否不是false,也就是说,它是一个值。


非常感谢Rich。当我在侧边栏顶部输入那行代码时,它在页面加载时并不可见?那它是如何显示内容的呢? - Dan

0

测试数值

$_SERVER[ 'REQUEST_URI' ]

针对字面量

'/index.php'。

如果完全相同,则执行 index.php。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接