Ошибка синтаксического анализа ":" Хорошо работает на локальном хосте

У меня есть 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 отключены "короткие теги".

Другие вопросы по тегам