Мне нужно отлаживать PHP. Какой у меня лучший выбор?

Я работаю над веб-сайтом в среде Linux (Debian). Я не эксперт в Linux, но я могу справиться с этим, и сайт создан с использованием PHP, MySQL, HTML и т.д.

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

До сих пор я использую vim, и все в порядке, но как я могу отлаживать PHP в моем случае? Какие инструменты следует установить? Они свободны?

В принципе, мне нужно знать, что было бы лучшим выбором в моей ситуации.

Ответ 1

XDebug предоставляет пошаговую отладку и может использоваться с eclipse PDT, netbeans и даже vim. Вы действительно должны попробовать. Также есть Zend Debugger.

Ответ 2

Вы можете установить PHP IDE с возможностями отладки. Это поможет вам отлаживать ваш PHP-код шаг за шагом.

Немногие популярны, у которых есть эта функция:


Для более продвинутого решения вы можете установить XDebug расширение для PHP.

По умолчанию, когда XDebug загружен, он должен автоматически показывать обратную трассировку в случае любой фатальной ошибки. Или вы трассируете в файл (xdebug.auto_trace), чтобы иметь очень большую обратную сторону всего запроса или выполнять профилирование (xdebug.profiler_enable) или другие настройки. Если файл трассировки слишком велик, вы можете использовать xdebug_start_trace() и xdebug_stop_trace() для удаления частичной трассы.

Установка

Использование PECL:

pecl install xdebug

В Linux:

sudo apt-get install php5-xdebug

На Mac (с Homebrew):

brew tap josegonzalez/php
brew search xdebug
php53-xdebug

Пример конфигурации шахты:

[xdebug]

; Extensions
extension=xdebug.so
; zend_extension="/YOUR_PATH/php/extensions/no-debug-non-zts-20090626/xdebug.so"
; zend_extension="/Applications/MAMP/bin/php/php5.3.20/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so" ; MAMP

; Data
xdebug.show_exception_trace=1       ; bool: Show a stack trace whenever an exception is raised.
xdebug.collect_vars = 1             ; bool: Gather information about which variables are used in a certain scope.
xdebug.show_local_vars=1            ; int: Generate stack dumps in error situations.
xdebug.collect_assignments=1        ; bool: Controls whether Xdebug should add variable assignments to function traces.
xdebug.collect_params=4             ; int1-4: Collect the parameters passed to functions when a function call is recorded.
xdebug.collect_return=1             ; bool: Write the return value of function calls to the trace files.
xdebug.var_display_max_children=256 ; int: Amount of array children and object properties are shown.
xdebug.var_display_max_data=1024    ; int: Max string length that is shown when variables are displayed.
xdebug.var_display_max_depth=3      ; int: How many nested levels of array/object elements are displayed.
xdebug.show_mem_delta=0             ; int: Show the difference in memory usage between function calls.

; Trace
xdebug.auto_trace=0                 ; bool: The tracing of function calls will be enabled just before the script is run.
xdebug.trace_output_dir="/var/log/xdebug" ; string: Directory where the tracing files will be written to.
xdebug.trace_output_name="%H%R-%s-%t"     ; string: Name of the file that is used to dump traces into.

; Profiler
xdebug.profiler_enable=0            ; bool: Profiler which creates files read by KCacheGrind.
xdebug.profiler_output_dir="/var/log/xdebug"  ; string: Directory where the profiler output will be written to.
xdebug.profiler_output_name="%H%R-%s-%t"      ; string: Name of the file that is used to dump traces into.
xdebug.profiler_append=0            ; bool: Files will not be overwritten when a new request would map to the same file.

; CLI
xdebug.cli_color=1                  ; bool: Color var_dumps and stack traces output when in CLI mode.

; Remote debugging
xdebug.remote_enable=off            ; bool: Try to contact a debug client which is listening on the host and port.
xdebug.remote_autostart=off         ; bool: Start a remote debugging session even GET/POST/COOKIE variable is not present.
xdebug.remote_handler=dbgp          ; select: php3/gdb/dbgp: The DBGp protocol is the only supported protocol.
xdebug.remote_host=localhost        ; string: Host/ip where the debug client is running.
xdebug.remote_port=9000             ; integer: The port to which Xdebug tries to connect on the remote host.
xdebug.remote_mode=req              ; select(req,jit): Selects when a debug connection is initiated.
xdebug.idekey="xdebug-cli"          ; string: IDE Key Xdebug which should pass on to the DBGp debugger handler.
xdebug.remote_log="/var/log/xdebug.log" ; string: Filename to a file to which all remote debugger communications are logged.

Ответ 3

Если вы используете apache как ваш веб-сервер, вы можете использовать журналы apache для просмотра любых ошибок, препятствующих успешному выполнению PHP script.

Вы можете использовать

tail -f /var/log/apache2/error.log

для просмотра журналов apache и выполнения задания (по крайней мере для подмножества ошибок, связанных с PHP).

Ответ 4

В частности, если вы (новичок вроде меня, который нашел этот поток SO после первого запуска с PHP и пытались выяснить, что генерирует сообщение об ошибке в первую очередь, начинайте с error_log. Эта функция отправляет строку как "сообщение об ошибке в журнал ошибок веб-сервера или в файл".

В общем, чтобы изучить основы отчетности и конфигурации ошибок в PHP, начните с функций в Документация по функциям обработки ошибок на PHP.net - комментарий на этой странице petrov dot michael () gmail com - это полезное место для начала.

Чтобы на самом деле генерировать ошибку, ваш лучший вариант в качестве новичка (что означает наименьшее количество документации для чтения) - это начать с print_r. Установка второго аргумента print_r в TRUE приведет к возврату строки, которую вы можете передать в error_log. Вероятно, это маршрут, который даст вам самый быстрый способ для отладки, учитывая, что ваш PHP-код может сидеть внутри какой-либо структуры, которая добавляет в различные уровни контроля вывода (например, Wordpress.)

Ответ 5

Если ОС вашего ПК - это Windows, тогда самый простой способ - использовать бесплатную версию CodeLobster с любым стеком веб-разработки (WAMP, XAMPP). Я обнаружил, что настройка CodeLobster для отладки очень проста (по сравнению с eclipse или netbeans), а установка CodeLobster - очень мал по сравнению с другими IDE, а также его бесплатная версия поддерживает полную функциональность отладки.

Вы можете найти подробное пошаговое руководство, чтобы настроить его в следующем сообщении Как отлаживать PHP - простой способ