Home  >  Article  >  Backend Development  >  Remote multi-session debugging for PHP

Remote multi-session debugging for PHP

巴扎黑
巴扎黑Original
2017-09-26 10:11:151525browse

This article mainly introduces you to relevant information about PHP remote multi-session debugging. The article introduces it in great detail through sample codes and pictures. It has certain reference learning value for everyone's study or work. Friends who need it can follow Let’s learn together with the editor.

1. Background introduction

This article mainly introduces the relevant content about PHP remote multi-session debugging, and shares it for your reference. Please refer to it for reference. I won’t say much below. Let’s take a look at the detailed introduction:

What problem is solved: Multiple project breakpoint debugging, www.mysite.com project will call The api.mysite.com project REST interface makes it more convenient to directly debug the interface in the api.mysite.com project when an action is triggered under the www.mysite.com project.

Suitable scenarios: Cross-project debugging, remote debugging, more convenient and easier to use than simple var_dump.

2. Remote debugging configuration

Nginx+PHP-fpm environment, configure php.ini extension


[Xdebug]
zend_extension = /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable=1
remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey=XDEBUG

Note: Whether the php of the CLI environment and the php of fpm use different php.ini configuration files, you need to configure the php.ini corresponding to fpm

Check whether the configuration is correct

Map remote (fpm host 10.99.1.185) port 9000 to local port 9000:


ssh -CNg -R 9000:localhost:9000 root@10.99.1.185

After installing openssh locally, you can use the ssh command directly

You can see on the server that port 9000 is occupied by ssh

PHPSTORM also needs to configure Xdebug, configure multiple debugging sessions to be enabled at the same time, port 9000, and accept external requests.

Configure project-related path mapping, domain name, port

3. Cross-session (project) debugging configuration

#The core of cross-project debugging is to send the conditions that trigger Xdebug debugging as parameters to api.mysite.com project or other subsequent projects.

www project code is as follows:

frontend.php


<?php

$personJson = file_get_contents(&#39;http://api.mysite.com/backend.php&#39;);

$person = json_decode($personJson);

var_dump($person);

api project code is as follows:

backend.php


<?php

class Person {

public $Name;

public $Email;

}

$person = new Person();

$person->Name = "Maarten";

$person->Email = "maarten.balliauw@jetbrains.com";

echo json_encode($person);

You need to modify the www project and add the network request parameters required by xdebug to trigger remote debugging:


<?php

$debuggingQuerystring = &#39;&#39;;

if (isset($_GET[&#39;XDEBUG_SESSION_START&#39;])) { // xdebug

$debuggingQuerystring = &#39;XDEBUG_SESSION_START=&#39; . $_GET[&#39;XDEBUG_SESSION_START&#39;];

}

if (isset($_COOKIE[&#39;XDEBUG_SESSION&#39;])) { // xdebug (cookie)

$debuggingQuerystring = &#39;XDEBUG_SESSION_START=PHPSTORM&#39;;

}

if (isset($_GET[&#39;start_debug&#39;])) { // zend debugger

$debuggingQuerystring = &#39;start_debug=&#39; . $_GET[&#39;start_debug&#39;];

}

$personJson = file_get_contents(&#39;http://api.mysite.com/backend.php?&#39;
. $debuggingQuerystring);

$person = json_decode($personJson);

var_dump($person);

Your own projects can add cookie parameters to the general network request encapsulation class:


curl_setopt($this->ch, CURLOPT_COOKIE, "XDEBUG_SESSION=XDEBUG");

4. Debugging process

  • ##Ensure that the debugging parameters have been forwarded to the api interface

  • Increase the number of sessions that can be debugged at the same time

  • Enable debugging monitoring and enable server-side Xdebug

The above is the detailed content of Remote multi-session debugging for PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn