奇怪的错误:相同的 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 行是唯一具有<?
而不是<?php
的行
@aynber: 不错!
您的 else 正在使用短标签,必须启用它才能正常工作。尝试更改为完整标签?
【参考方案1】:
您的 else 正在使用短标签,可能并非在所有服务器上都启用。将其更改为使用完整的 php 标签:
<?php else: ?>
【讨论】:
您的侦探工作非常出色,但是您的这部分问题“不适用于所有服务器” 让我感到困惑。可以在他们的系统文件中启用该选项。由于此问答***.com/q/14188397 概述了<?
默认情况下未启用,因此<?=
将永久启用。只是一个简短的说明;-)【参考方案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 中删除。" - 里面没有提到<?
- 他们专门写了“ASP标签”。我不是说你错了,但我也不是说你也不对。
在混合使用 html 和 php 时,我个人更喜欢“模板”语法而不是 echo。使用 echo 可以轻松使用 "
双引号,您最好使用 NewDoc 或 HereDoc。
@Fred-ii- 你是对的,因为它与我手头的问题无关,我删除了这条线。
@Xorifelse 谢谢。当我给自己再喝杯咖啡时,我确实有另一个想法(lol)。如果 PHP 7.0 曾经删除了 <?
短标签,那么如果/当他们升级时,就会有很多被勾选的 (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 上