PHP страница отображается на ubuntu, а не на Windows 7
мы унаследовали страницу PHP, которая отлично работает на Ubuntu, но сбрасывает исходный код на дисплей в системе Windows 7 под управлением XAMMP с использованием PHP 5.4 или WAMP с использованием PHP 5.3.
точка, где происходит дамп, кажется, когда он пытается проанализировать комбинацию символов "- > " (свойство объекта). Когда я изменяю это на "[] "для доступа в качестве элемента массива, он проходит мимо этого, но затем сбрасывает исходный код на дисплей, который появляется после символа "= > " (отображение) сочетание. Комментируя, что это не работает, только удаление всей строки получает его мимо там.
наконец, когда он просто распечатывает html со знаками " ", это также вызывает дамп экрана. Если я заменю эти символы объектами html, исходный код больше не будет сбрасываться, но программа не отображает меню и не работает вообще. Обратите внимание, что я могу успешно войти в приложение через его страницу входа в систему, хотя даже это отображает " POST "и некоторые другие" " в поле username.
Я пробовал запускать 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
Я попытался изменить короткий открытый тег, но это не имело значения.
продукт был написан для нас аутсорсинговой группой, и он, похоже, основан на какой-то структуре. Но я не смог найти никаких ссылок ни на одно из имен классов в Google, так что, возможно, они написали все это в доме.
идем в Apache log, фактическая ошибка происходит в этой строке:
$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']);
где сообщение об ошибке:
членство не нашел
Membership-это класс, который объявляется позже в том же файле, что и тот, который сбрасывается на дисплей в точке, показанной выше, поэтому по какой-то причине парсер PHP не понимает, что он читает PHP-код с этой точки.
4 ответов
I tried changing the short-open-tag but it made no difference.
в этом случае что вы можете сделать, это написать небольшой скрипт и запустить его и посмотреть, работает ли он. попробуйте короткий тег и метод ниже. Имейте в виду, что если вы запутались с php.ini
вам придется перезапустить сервер. Лучше изменить настройку, щелкнув правой кнопкой мыши значок сервера на панели задач. Это может быть из-за php короткие теги. Попробуйте включить, отключить и запустить сценарий. Также измените приведенный ниже скрипт и посмотрите, как это влияет на ваш изменить настройки.
например :
<?php
echo "hi";
// phpinfo(); <-- preferred if you can
?>
затем вы можете увидеть, работает ли ваш сервер, как вы намереваетесь. Если это O / P hi
вы хорошо, чтобы попробовать свой большой код и посмотреть.
кстати код, который вы предоставили, кажется, не имеет ошибок.
Хммм, это интересно.
Если это большое приложение, то вам, возможно, придется проверить все включаемые файлы. Может быть ряд вопросов.
попробуйте сделать следующие шаги
- Set
error_reporting(E_ALL);
- попробуйте использовать
debug_backtrace
http://php.net/manual/en/function.debug-backtrace.php - проверьте состояние буферизации вывода. Это включено или выключено
С другой стороны, вы скопировали весь проект от linux до windows? может быть, некоторые файлы находятся вне папки проекта, которых нет в windows? Я знаю, что многие люди создают такие лазейки, чтобы с ними можно было связаться для "поддержки":)
PHP нечувствителен к регистру для именования классов. Вы можете нормально сделать
$membership = new membership();
даже если класс называется "членство" и наоборот. Попробуйте изменить имя класса, возможно, имя файла класса зависит от регистра в операционной системе.
очень странно.. хотя вы можете проверить, был ли загружен класс членства или нет, используя функцию:
array get_declared_classes ( void )
<?php
print_r(get_declared_classes());
?>
он возвращает массив с именем определенных классов.
ref: http://php.net/manual/en/function.get-declared-classes.php