【问题标题】:Strange ERROR: Same PHP code but different result in mac and windows machine奇怪的错误:相同的 PHP 代码但在 mac 和 windows 机器上的结果不同
【发布时间】:2016-09-16 19:14:33
【问题描述】:

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

<?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*。你有什么想法吗?提前致谢!

【问题讨论】:

  • 如果所有 6 个都显示,则 PHP 没有正确安装/配置,或者页面没有 .php 扩展名。在页面上做一个view source,你会看到PHP代码。
  • 也许他们的服务器上没有启用短标签。 else 行是唯一具有&lt;? 而不是&lt;?php 的行
  • @aynber: 不错!
  • 您的 else 正在使用短标签,必须启用它才能正常工作。尝试更改为完整标签?

标签: php windows macos xampp


【解决方案1】:

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

<?php else: ?>

【讨论】:

  • 您的侦探工作非常出色,但是您的这部分问题“不适用于所有服务器” 让我感到困惑。可以在他们的系统文件中启用该选项。由于此问答stackoverflow.com/q/14188397 概述了&lt;? 默认情况下未启用,因此&lt;?= 将永久启用。只是一个简短的说明;-)
【解决方案2】:

正如 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 中,数据库区分大小写,而在 Windows 中则不区分大小写。还应考虑路径位置。然后是 32b 与 64b 整数大小,只是说这不是一个不常见的问题。

【讨论】:

  • php.net/manual/en/language.basic-syntax.phptags.php "7.0.0 ASP 标签 , 已从 PHP 中删除。" - 里面没有提到&lt;? - 他们专门写了“ASP标签”。我不是说你错了,但我也不是说你也不对。
  • 在混合使用 html 和 php 时,我个人更喜欢“模板”语法而不是 echo。使用 echo 可以轻松使用 " 双引号,您最好使用 NewDoc 或 HereDoc。
  • @Fred-ii- 你是对的,因为它与我手头的问题无关,我删除了这条线。
  • @Xorifelse 谢谢。当我给自己再喝杯咖啡时,我确实有另一个想法(lol)。如果 PHP 7.0 曾经删除了 &lt;? 短标签,那么如果/当他们升级时,就会有很多被勾选的 (PHP) 编码人员必须完全重建他们的代码;-)
  • @Fred-ii- 好吧,这不像是他们还没有使用所有这些旧数据库连接... :)
【解决方案3】:

试试下面的代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多