Отладка PHP скриптов, включающих зазенденный код, в ОС Windows
Здравствуйте!
Столкнулся с проблемой отладки: не могу отлаживать PHP скрипты, в которых встречается конструкция вида require_once('main_classes.php' или любого другого зазезденного (или аналогичным образом включающего зазенденный) файла. Вместо этого выдается сообщение "Zend Optimizer Not Installed".
При этом без отладки отлично исполняются и расшифровываются все страницы, отладка скриптов с незашифрованным текстом также происходит на ура.
Надеюсь что кто-нибудь сталкивался с подобной проблемой и сможет мне помочь.
Что есть:
1. ОС Windows Vista Business 32bit
2. Denwer3_Base_PHP52_2010-11-07_a2.2.4_p5.2.12_zendoptimizer_m5.1.40_pma3.2.3
3. Denwer3_PHP52_2010-03-18_php5.2.12_zendoptimizer
4. Установлен Zend Debugger 5.2.15 (так как он единственный отладчик, который совместим с Zend Optimizer)
5. phpinfo()
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
with Zend Debugger v5.2.15, Copyright (c) 1999-2008, by Zend Technologies
6. Сайт, успешно работающий на системе управления HostCMS v. 5.9.23
7. Eclipse for PHP Developers (helios). Zend Debugger настроен, т.е. в режиме Debug Mode (PHP Web Page) при клике по кнопке "Test Debug" выдается результат "Success".
Что пробовал:
1. Пробовал менять сборки веб-серверов, в частности вместо Denwer'a пробовал использовать XAMPP 1.7.3 (+downgrage PHP), Zend Server CE (аналогично)
2. Пробовал разные версии PHP от 5.2.9 до 5.2.12
3. Пробовал загружать Zend Debugger и Zend Optimizer как через Zend Extension Manager, так и без него.
4. Поставил Ubuntu 10.04 + поднял LAMP на этой системе. Все работает с аналогичными (с поправкой на другую ОС) настройками (apache, php, PDT). Пока пробовал установку ОС на виртуалке - тормозит, в качестве отдельной ОС - не годится.
5. Нагуглить вдруг кто-то еще сталкивался с такой проблемой. Не помогло. Нашел только посты с описанием подобной проблемы, но не её решением: (второй пост тут тоже мой)
Re: Отладка PHP скриптов, включающих зазенденный код, в ОС Windows
В общем как оказалось, все дело в версии оптимайзера 3.3.3, более свежих версий которого нет под Windows.
Для того, чтобы и скрипты запускались, и отладка работала так, как она должна работать - самый простой вариант - использовать Zend Server CE для PHP 5.2, а при установке выбрать "Custom Installation" и обязательно отметить Zend Guard Loader - именно он и будет отвечать за декодирование скриптов во время выполнения.
Какой из компонентов - или Zend Debugger, или Zend Guard Loader, или Zend Extension Manager стоит обновить, чтобы все работало на другой сборке сервера - не знаю, но проблема все-таки решается.
Re: Re: Отладка PHP скриптов, включающих зазенденный код, в ОС Windows
Да, он изначально планировался для его замены. Т.е. начиная с версии PHP 5.3 Optimizer'а просто не существует, а расшифровку кода производит Zend Guard Loader.
По умолчанию с сервером он не ставится (ставится только Zend Optimizer+, но это совсем другая штука для ускорения обработки кода, а не для его декодирования), его надо отметить при выборочной установке.
Я проверял на сервере Zend Server CE 5 (под версию PHP 5.2) как раз на демо-сайте под управлением HostCMS.Халява, все работает.
Re: Отладка PHP скриптов, включающих зазенденный код, в ОС Windows
alexr,
спасибо большое, помогло, зазенденный код воспроизвелся.
Но возникла ошибка в админке. Вхожу в админку нормально. Но не могу открыть ни один пункт из правого меню. Если открывать отдельной страницей прямую ссылку (типа /admin/structure/structure.php ), выдает ошибку 500.
Методом тыка определили, что ошибка происходит в файле structure.php (и в любом другом файле, на который ведет правое меню) в 19 строке:
$admin->admin_session_valid('Structure';
Если вместо 'Structure' написать туда несуществующий модуль или пустые кавычки, выдает страничку без ошибок и пишет что такой модуль отключен. Но если модуль существует, видимо система пытается загрузить модуль и получается ошибка 500.
Пробовали засовывать эту строку в try{}catch(){} - не помогает.
Логи hostcms/logs и "php_error.log" (прописанный в php.ini) пусты.
Re: Отладка PHP скриптов, включающих зазенденный код, в ОС Windows
Итак, метод alexr мне помог, но потом возникла куча других ошибок. В самых разных местах система вылетала с ошибкой 500 - наблюдались явные проблемы с Zend-ом.
Оказалось, все гораздо проще. Если вернуться назад, когда Zend Optimizer 3.3.3 не хочет устанавливаться - установлен не тот PHP.
В статье пишется так:
"Для работы с IIS компания Microsoft рекомендует использовать версии Non-thread-safe, которая специально разработана для работы с FastCGI на IIS."
В других мануалах тоже говорят устанавливать так. Но как раз Zend Optimizer не устанавливается на Non-thread-safe PHP.
Установил обычный PHP 5.9.17 , потом просто поставил Zend Optimizer - все заработало! Ура.