【问题标题】:Parse error unexpected ":" Works fine in localhost解析错误意外“:”在本地主机中工作正常
【发布时间】:2016-01-15 16:59:35
【问题描述】:

我有一个 PHP 应用程序,它是由我自己和我们几个人完成的。我没有编写太多代码,但它在localhost 中运行良好。当我尝试将它上传到我们的大学网络服务器时,我遇到了这个错误。

解析错误意外:

这发生在这条线上。所以我相信 PHP 也必须对前一行做一些事情。所以我添加了上一行和下一行:

<?php
  session_start();
  $page = $_GET["page"] ?: "index"; // Error in this line!

有趣的是,这在我的本地 WAMP 服务器上有效,但在大学服务器中无效。代码有问题吗?

【问题讨论】:

  • 您在本地运行较新的版本 - ?: 语法是新的
  • 本地和服务器的PHP版本是多少?
  • 我在 WAMP 服务器中使用 PHP 5.4。大学使用 5.2.12。
  • 你必须升级到 5.3
  • 与管理员交谈。如果他们没有听说需要更新,他们将不会做任何事情。在使用当前的 PHP 软件时,拥有这样一个过时的 PHP 版本会产生很多问题,不仅与安全有关。

标签: php


【解决方案1】:

我相信您大学网络服务器中的 PHP 非常旧或早于 5.3。这是一个速记三元运算符,受 PHP 5.3 及以上版本支持。

解决方法

$page = $_GET["page"] ? $_GET["page"] : "index";

更新:要删除未设置$_GET["page"] 的警告,您可以使用:

$page = isset($_GET["page"]) ? $_GET["page"] : "index"; // Checks if $_GET["page"] exists, and then assigns it.

PHP 7 将允许使用这种简短的语法:

$page = $_GET["page"] ?? "index";

来自文档:

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

【讨论】:

  • 解决方法奏效了。但我有一个问题。我有时会在index 页面中收到Warning。有什么可以帮我的吗?
  • 这可能是因为$_GET["page"] 未设置。您可以在其前面使用@ 覆盖它。
  • 不要压制错误,这是不好的做法!相反,如果该字段设置为(isset($_GET['page'])) ? //do stuff : //do other stuff ,请进行测试
  • @AlanMachado 我已将其包含在我的评论中。你看见了吗? :)
  • 是的,我看到了。我也在提一个建议!
【解决方案2】:

引用PHP Docs

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

我建议你的大学应该将他们的服务器更新到受支持的 PHP 版本

【讨论】:

  • 无法升级大学服务器,抱歉。不过谢谢,我从 Praveen 那里得到了解决方法。
【解决方案3】:

可能是PHP版本的问题。

也许您本地的 PHP 版本比您大学服务器中的更高。

您必须查看 PHP ?: 在哪个版本中工作

【讨论】:

    【解决方案4】:

    如果语法在您的服务器上不起作用,则可能是您的 PHP ini 文件中禁用了“短标签”。

    【讨论】:

    • 短标签已启用。
    猜你喜欢
    • 2013-03-21
    • 2019-05-07
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多