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


Strange ERROR: Same PHP code but different result in mac and windows machine

我遇到了一个非常奇怪的bug。给定相同的代码:

<?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)。我们都在examplep中运行它,我得到了一个正常的结果:在身份验证之前,只显示前三个链接。但在他们的机器中,所有六个链接都显示在页面上,这是不可能的。我们的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的整数大小,只是说这不是一个罕见的问题。

试试下面的代码:

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