Home > Article > Backend Development > Remote multi-session debugging for PHP
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('http://api.mysite.com/backend.php'); $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 = ''; if (isset($_GET['XDEBUG_SESSION_START'])) { // xdebug $debuggingQuerystring = 'XDEBUG_SESSION_START=' . $_GET['XDEBUG_SESSION_START']; } if (isset($_COOKIE['XDEBUG_SESSION'])) { // xdebug (cookie) $debuggingQuerystring = 'XDEBUG_SESSION_START=PHPSTORM'; } if (isset($_GET['start_debug'])) { // zend debugger $debuggingQuerystring = 'start_debug=' . $_GET['start_debug']; } $personJson = file_get_contents('http://api.mysite.com/backend.php?' . $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
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!