奇怪的错误:相同的PHP代码,但在mac和windows机器上的结果不同

奇怪的错误:相同的PHP代码,但在mac和windows机器上的结果不同,php,windows,macos,xampp,Php,Windows,Macos,Xampp,我遇到了一只非常奇怪的虫子。给定相同的代码: <?php session_start(); ?> <?php if (!isset($_SESSION['email'])): ?> <p><a href="admin_reg.php">Regsiter as admin</p> <p><a href="student_reg.php">Register as student</p> <p>

我遇到了一只非常奇怪的虫子。给定相同的代码:

<?php session_start(); ?>
<?php if (!isset($_SESSION['email'])): ?>
<p><a href="admin_reg.php">Regsiter as admin</p>
<p><a href="student_reg.php">Register as student</p>
<p><a href="login.php">Log in</a></p>
<? else: ?>
<p><a href="logout.php">Log out</a></p>
<p><a href="group_create.php">Create group</a></p>
<p><a href="group_join.php">Join group</a></p>
<?php endif; ?>


我和我的小组成员在不同的机器上运行相同的项目(他们使用windows,我使用mac)。我们都在xampp中运行它,我得到了一个正常的结果:在身份验证之前,只有前三个链接出现。但在他们的机器中,所有六个链接都显示在页面上,这是不可能的。我们的PHP版本也一样:
5.6.1*
。你知道这件事吗?提前谢谢

您的else正在使用短标记,这可能不是在所有服务器上都启用的。将其更改为使用完整的php标记:

<?php else: ?>

正如aynber所指出的,很可能是由于您的短标记必须在php.ini中启用

但是为什么不这样编写代码呢?完全兼容,无论php配置如何

<?php

  session_start();

  if (!isset($_SESSION['email'])){
    echo '<p><a href="admin_reg.php">Regsiter as admin</p>',
         '<p><a href="student_reg.php">Register as student</p>',
         '<p><a href="admin_reg.php">Regsiter as admin</p>';
  } else {
    echo '<p><a href="logout.php">Log out</a></p>',
         '<p><a href="group_create.php">Create group</a></p>',
         '<p><a href="group_join.php">Join group</a></p>';
  }

?>

同样值得一提的是,相同的php代码可以在不同的操作系统上产生不同的结果(除了服务器设置)。在Linux中,DB区分大小写,在Windows中则不区分大小写。还应考虑路径位置。然后是32b对64b的整数大小,只是说这不是一个罕见的问题。

试试下面的代码:



如果全部显示6个,则说明PHP没有正确安装/配置,或者页面没有
.PHP
扩展名。在页面上查看源代码,您将看到PHP代码。可能短标记没有在服务器上启用。else行是唯一一个有
@aynber:抓得好!您的else正在使用短标记,必须启用它才能正常工作。试着换成完整标签吗?你这方面做得很好,但是你问题的这一部分“它不适用于所有服务器”让我困惑。可以在其系统文件中启用该选项。由于本问答概述了
“7.0.0”是ASP标记,我个人更喜欢在混合使用html和php时使用“模板”语法而不是echo。使用echo可以消除轻松使用
双引号的能力,最好改用NewDoc或HereDoc。@Fred ii-你说得对,因为这与手头的问题无关,所以我删除了这条线。@Xorif,谢谢。当我给自己再拿一杯咖啡时,我确实有了另一个想法(哈哈)。如果PHP7.0曾经删除过
@Fred ii-好吧,这并不是说他们没有在所有这些遗留数据库连接上打勾…:)