Ошибка синтаксического анализа ":" Хорошо работает на локальном хосте
У меня есть PHP-приложение, которое было сделано мной и несколькими из нас. Я не так много кодировал, но в localhost
, Когда я попытался загрузить его на наш университетский веб-сервер, я получил эту ошибку.
Ошибка разбора неожиданная
:
Это произошло на этой линии. Поэтому я считаю, что PHP должен что-то делать по отношению к предыдущей строке. Поэтому я добавляю предыдущие и следующие строки:
<?php
session_start();
$page = $_GET["page"] ?: "index"; // Error in this line!
Самое смешное, что это работает на моем WAMP-сервере локально, но не работает на университетском сервере. Есть ли проблема с кодом?
4 ответа
Я считаю, что 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?: Expr3 возвращает expr1, если expr1 оценивается как TRUE, и expr3 в противном случае.
Проблема может быть в версии PHP.
Возможно, ваша локальная версия PHP выше, чем на вашем университетском сервере.
Вы должны увидеть, в какой версии от PHP ?:
работает
Цитирование из документов PHP
Начиная с PHP 5.3, можно опустить среднюю часть троичного оператора. Выражение expr1?: Expr3 возвращает expr1, если expr1 оценивается как TRUE, и expr3 в противном случае.
Я предлагаю вашему университету обновить свои серверы до поддерживаемой версии PHP
Если синтаксис на вашем сервере не работает, возможно, в вашем ini-файле PHP отключены "короткие теги".