Ошибка анализа без ошибок ":" Работает нормально в localhost

У меня есть приложение PHP со мной, которое было сделано мной и несколькими из нас. Я не кодировал много, но он хорошо работал в localhost. Когда я попытался загрузить его на нашем веб-сервере университета, у меня была эта ошибка.

Ошибка анализа без ответа :

Это произошло в этой строке. Поэтому я считаю, что PHP тоже должен что-то делать в отношении предыдущей строки. Поэтому я добавляю предыдущую и следующую строки:

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

Самое смешное, что это работает на моем сервере WAMP локально, но он не работает на университетском сервере. Есть ли проблема с кодом?

Ответы

Ответ 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 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.

Ответ 2

Цитата из Документы PHP

С PHP 5.3 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.

Я предлагаю вашему университету обновить свои серверы до поддерживаемой версии PHP

Ответ 3

Проблема может быть в версии PHP.

Возможно, ваша локальная версия PHP выше, чем на вашем университетском сервере.

Вы должны увидеть, в какой версии PHP ?: работает

Ответ 4

Если синтаксис не работает на вашем сервере, возможно, что "короткие теги" отключены в вашем PHP файле ini.