How to set up plugin project with XDebug remote debugging in PhpStorm

I am looking for a detailed setup instructions for a plugin project in PhpStorm with full comfort like quick deployment to a testing site, debugging etc.

I’m going to start with how our current project structure is and what are the issues with it.

The project folder (where it is checked out from our version control system) is e.g. C:\Projects\sampleplugin. The testing site is C:\wamp\www\wpsite, so the plugin is deployed as C:\wamp\www\wpsite\wp-content\plugins\sampleplugin.

One other important thing is that I have a clean, unzipped installation of WordPress mapped as a PHP library in my PhpStorm project so that I get code hinting etc. The PHP library is something like C:\wpsources\4.0.

In PhpStorm, I have set up a Deployment (Settings > Deployment) like this:

  • Type: Local or mounted folder
  • Folder: c:\wamp\www\wpsite
  • Web server root URL: http://localhost/wpsite
  • … and on the Mappings tab:
    • Local path: C:\Projects\sampleplugin
    • Deployment path on server ‘mydeploymentname’: wp-content\plugins\sampleplugin
    • Web path on server ‘mydeploymentname’: /

This deployment works fine.

However, I don’t know how to set up debugging (so that it works). I have this in Settings > PHP > Servers:

  • Host: localhost, port 80, debugger Xdebug
  • Use path mappings: checked
  • In the mappings section, these are the mappings:
    • C:\Projects\sampleplugin –> c:\wamp\www\wpsite\wp-content\plugins\sampleplugin
    • C:\wpsources\4.0 –> c:\wamp\www\wpsite

But the debugging doesn’t work, the Validate remote environment in that dialog doesn’t work etc.

Does any one of you have a fully working setup where you could do things like debug your plugin, step into WP code etc.?

Solutions Collecting From Web of "How to set up plugin project with XDebug remote debugging in PhpStorm"

I am assuming that you already followed the tutorials on setting up xDebug on PHP installation and PhpStorm. Let me know if you need some help with that.

I am using xDebug Helper extension on Chrome. Install it too.

With the extension installed:

  1. In PhpStorm, go to Run > Start Listening for PHP Debug Connections.
  2. Set a breakpoint in your code.
  3. Go to Chrome and Select Debug in the small insect.

    xDebug Helper

  4. Refresh your page.

  5. Back in PhpStorm, accept the incoming connection.

    incoming connection

  6. Enjoy debugging your code.

I cheated by checking out my plugin into the wordpress plugins directory (can’t remember if I tried a sim link or not), opening a PHPStorm project on the whole wordpress install and just debugged from there.

Maybe not what you wanted but I was up and running in 5 mins.

I’m using PHPStorm, and everything you describe should work. The only thing is that you need to install and configure xdebug via wamp to be sure it’s running.

My configuration is not fully functional so this isn’t really an answer … but I wanted to share my thoughts and some information on what I’ve tried to get this set up so far.

My setup was pretty much the same as that described by Borek.

  1. Plugins in one directory on my file system
  2. Clean WP 4.1 in another directory on the file system attached as a library (and yes, code completion and such worked fine)
  3. Local web server with plugins properly able to be deployed to it

With this setup, when I attempt to validate I receive the following error:

“Failed to execute validation script: ‘Could not read from “http://testing.localhost/_intellij_phpdebug_validator.php” because it is not a file.

The “Local path to create validation script” was set to C:\sources\my_plugins\plugins\privateer-page-types (the plugin source).

Obviously, it is looking in the wrong place so I changed the mapping to the following (Settings > Build,Execution,Deployment > Deployment):

  • Local: C:\sources\my_plugins\plugins\privateer-page-types
  • Deployment on server: wp-content\plugins\privateer-page-types
  • Web path on server: /wp-content/plugins/privateer-page-types

I did this as I realized that the web path is supposed to be the web path to the project on the server.

Once I did that, going to Settings > Languages & Frameworks > PHP > Servers and selecting Validate, I had the following setup:

  • Deployment server: Local Test
  • Local path to create validation script: C:\sources\my_plugins\plugins\privateer-page-types (the local source directory)

Clicking validate now properly shows the php.ini file, xdebug, remote host, etc.

I then set up a Run/Debug Configuration:

  • PHP Web Application
  • Name: wp-root
  • Start URL: /
  • Server: Plugin Testing
  • Browser: Chrome (with the xdebug helper installed)

Starting the debugger, it sits at Waiting for incoming connection with ide key 16907 but never notices the connection.

I tried changing the port from 9000 to 8080 under Settings > Languages & Frameworks > PHP > Debug > Xdebug.Debug port … which then prevented the xdebug from starting as I have phpstorm set to use xdebug on 8080 ( Settings > Build,Execution,Deployment > Debugger ).

At this point, things seem like they should be working, but for some reason I cannot get past “listening”.

I’ve tried one config (noted above) with the start url as /, one with the start url as index.php, and another with the start url as the core plugin file … all with the same result.

Anywise, maybe this will help someone … and if I finally get it working I’ll make an update.