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

Posted

技术标签:

【中文标题】奇怪的错误:相同的 PHP 代码但在 mac 和 windows 机器上的结果不同【英文标题】:Strange ERROR: Same PHP code but different result in mac and windows machine 【发布时间】: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 正在使用短标签,必须启用它才能正常工作。尝试更改为完整标签? 【参考方案1】:

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

<?php else: ?>

【讨论】:

您的侦探工作非常出色,但是您的这部分问题“不适用于所有服务器” 让我感到困惑。可以在他们的系统文件中启用该选项。由于此问答***.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  ?>

【讨论】:

以上是关于奇怪的错误:相同的 PHP 代码但在 mac 和 windows 机器上的结果不同的主要内容,如果未能解决你的问题,请参考以下文章

使用奇怪的 OOP 引用的 php5 到 php7 迁移代码问题? [复制]

奇怪的 Atomikos 异常 - init() 中的错误:日志已在使用中?

GLSL 给出奇怪的错误:“#version required and missing”仅在 Mac 上

相同的代码,但在 web 版本上出现错误。为啥?

bashrc 中的奇怪行为:连接,相同的代码运行/失败 [重复]

尝试在laravel 5.1 mac上安装php phantom js时,Composer安装错误