Отображаются страницы PHP на ubuntu, а не на Windows 7

Мы унаследовали страницу PHP, которая отлично работает на Ubuntu, но выдает исходный код на экран в системе Windows 7, использующей XAMMP с использованием PHP 5.4 или WAMP с использованием PHP 5.3.

Точка, где происходит свалка, похоже, когда она пытается разобрать комбинацию символов "- > " (свойство объекта). Когда я изменяю это на "[]" для доступа в качестве элемента массива, он проходит мимо этого, но затем выгружает исходный код на дисплей, который появляется после комбинации символов "= > " (сопоставление). Комментируя это, не работает, только удаление всей строки заставляет его пройти.

Наконец, когда он просто распечатывает html с "<" и " > ", что также вызывает сброс экрана. Если я заменю эти символы объектами html, исходный код больше не сбрасывается, но программа не отображает меню и вообще не работает. Обратите внимание, что я могу успешно войти в приложение через страницу входа в систему, хотя даже это отображает "POST" и некоторые другие "<" и " > " в поле имени пользователя.

Я пробовал использовать unix2dos для всего приложения, но это не имело никакого эффекта. Также попытался преобразовать текст одной из страниц-нарушителей в UTF-8, но все равно не повезло.

В ответ на некоторые из поставленных вопросов:

Рабочая версия ubuntu - это PHP-версия 5.3.10-1ubuntu3.1

Первая часть кода, которая работает в Ubuntu, а не в Windows, такова:

public function __construct($gid)
{
    $this->id = $gid;
    return $this->retrieve();
}

где сбрасывание кода на дисплее начинается с:

id = $gid; return $this->retrieve(); }

Да, PHPInfo работает, показывая для сервера WAMP с PHP версии 5.3.13

Я попытался изменить ярлык short-open, но это не имело значения.

Продукт был написан для нас группой аутсорсинга, и, похоже, он основан на какой-то структуре. Но я не мог найти ссылки на какие-либо из классов в Google, так что, возможно, они все это писали сами.

Переход к журналу apache, фактическая ошибка происходит в этой строке:

$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']);

где сообщение об ошибке:

Членство 'не найдено

Членство - это класс, который объявляется позже в том же файле, что и тот, который сбрасывается на дисплее в указанной выше точке, поэтому по какой-то причине парсер PHP не понимает, что он читает PHP-код с этой точки.

Ответ 1

I tried changing the short-open-tag but it made no difference.

В таком сценарии, что вы можете сделать, это написать небольшой script и запустить его и посмотреть, работает ли он. попробуйте короткий тег и ниже метод. Имейте в виду, что если вы возитесь со своим php.ini, вам придется перезапустить сервер. Лучше изменить настройку, щелкнув правой кнопкой мыши значок сервера на панели задач. Это может быть из-за коротких тегов php. Попробуйте включить и отключить и запустить script. Также измените ниже script и посмотрите, как это влияет на ваши измененные настройки.

EG:

<?php
echo "hi";
// phpinfo(); <-- preferred if you can
?>

Затем вы можете увидеть, работает ли ваш сервер на вас, как предполагают. Если это O/P hi, вы можете попробовать свой большой код и посмотреть.

Кстати, код, который вы предоставили, не имеет ошибок.

Ответ 2

Хммм, это интересно.

Если это большое приложение, вам может потребоваться проверить все включенные файлы. Может возникнуть ряд проблем.

Попробуйте выполнить следующие шаги

  • Установить error_reporting(E_ALL);
  • Попробуйте использовать debug_backtrace http://php.net/manual/en/function.debug-backtrace.php
  • Проверьте состояние буферизации вывода. Включено или выключено.

С другой стороны, скопировали ли вы весь проект из linux в windows? может быть, некоторые файлы находятся за пределами папки проекта, которых нет в окнах? Я знаю, что многие люди создают такие лазейки, чтобы с ними можно было связаться для "ПОДДЕРЖКИ":)

Ответ 3

PHP нечувствителен к регистру для имен классов. Обычно вы можете

$membership = new membership();

даже если класс называется "Членство" и наоборот. Попробуйте изменить имя класса, возможно, имя файла класса зависит от регистра в операционной системе.

Ответ 4

Это действительно странно.. хотя вы можете проверить, что класс Membership загружен или не использует функцию:

array get_declared_classes ( void )


<?php
print_r(get_declared_classes());
?>

Он будет возвращать массив с именем определенных классов.

исх: http://php.net/manual/en/function.get-declared-classes.php