Debugging with xdebug, netbeans and a mounted remote server - php

I've using Netbeans to develop on a windows machine, the files I'm editing are on a remote LAMP server. The document root is mounted on my windows machine as a drive letter (Y:). So, netbeans things I'm developing locally, whereas I'm actually developing remotely on a local mount.
My problem starts when I want to use xdebug and netbeans to debug CLI PHP scripts. Debugging browser based stuff is fairly straight forward, but debugging CLI stuff is a little more convoluted and I'm not sure I know how to get it working.
The first problem is that, Netbeans wants to know where the php5 interpreter is, but I can't tell it as it's on the remote server...
Does anyone have any experience with doing this?
Thanks,
Mike

The key Netbeans PHP debugging breakthrough came for me when I added a path mapping to my project (under Project Tab|Right-click Project|Properties|Run Configuration|Advanced Button), so that my project knew how to correlate server source code paths to the local paths (windows drive letter paths).
Example path map:
/home/myusername/sourcedir mapped to x:\sourcedir
I believe I work with a similar configuration to yours (LAMP server, windows machine with the source from the LAMP machine showing up locally under a windows mapped drive). This worked for me.
I had been trying the URLs for my project (http://server/projectroot) as the path mapping. That was not what was needed. The actual path on the server (i.e. my home directory and below) was needed.

Pada meant: xdebug.remote_connect_back, not xdebug.remote_enable. You must have both of them set in order for Xdebug to auto-connect back to Netbeans (or whatever the debugger).

The xdebug.remote_host variable refers to the host that xdebug should connect. You can debug PHP on a remote server using NetBeans, but it would require you to configure xdebug on the remote server such that it would connect to your development PC.
Here's a simple example:
Your development PC, with NetBeans, is on 10.0.0.100,
and your remote PHP webserver is on 10.0.0.1
Set the xdebug.remote_host=10.0.0.100
Now whenever someone (or you) specified the XDEBUG_SESSION_START parameter in the URL on the remote server, xdebug would try to connect to 10.0.0.100.
Xdebug v2.1 has a nice feature: xdebug.remote_enable = 1
Enabling that option would override xdebug.remote_host and then xdebug would connect to the $_SERVER['REMOTE_ADDR'] (which is the IP address that the client is connecting from). This awesome feature would allow you to have multiple debugging on the same server, since you can't manipulate xdebug.remote_host with ini_set()

I don't know about Netbeans, never used it, but in Eclipse PDT where you can also debug using XDebug there is a distinction between "PHP web page" and "PHP script". For "PHP web page" you choose a web server (that you configured earlier) and not a php interpreter (like you have to do with "PHP script").
Perhaps there's the same thing for Netbeans?

xdebug.remote_autostart=1 to automatic remote connection.
in "Xdebug v2.1 has a nice feature:".

Related

How to debugging php on a VPS using phpStorm and Xdebug?

I have trying to get this done for days...and reading through about 20 tutorials, documents, etc...but still no luck.
Here is the thing. I installed wordpress(just for example, can be any php program) on my VPS, and hoping to debug it from my macbook and my desktop. This is clearly a remote debugging thing. So I here is what I done:
1.Installed right version of xdebug and located its .so file on VPS.
2.Changing php.ini and 20-xdebug.ini file on VPS, my settings currently are:
zend_extension=/usr/lib/php5/20131226/xdebug.so
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.remote_port=9200
xdebug.show_local_vars=0
xdebug.var_display_max_data=10000
xdebug.var_display_max_depth=20
xdebug.show_exception_trace=0
xdebug.remote_log=/var/log/xdebug.log
;xdebug.remote_host=202.84.93.66
The last line, which is comment out is my desktop IP address, where I run phpStorm. Based on xdebug's documents, if you set remote_connect_back=1, you won't need this host ip to be specifici.
On phpStorm Side, I "start new project from existing code, and specificy the source root on VPS, map it with one of my local dest. PhpStorm just downloaded all the files and after setting up "Automatic upload", the sync is perfect.
On phpStorm side, I specificy the PHP intercepter as the remote one on my VPS.
On phpStorm side, I changed my debugging port to 9200, as same as the one I using on VPS.
Using the booklet method phpStorm provide, I put them on my firefox bootkmarklet.
Click listen button on phpStorm, set breakpoint, go to firefox open the page, click 'start debuging', refresh.....BUT NOTHING HAPPENS!
I also tried to using the tranditional methods, which set a run configration way as both php-webapplication or php-remote-debug...but still not working.
At php storm, the web debug validation, I could pass all the testing there though....
Can anyone help me with this? I think I must be doing wrong on some very fundation part since I saw all the tutorial are so simple set, but this already took me about 3 days to figure out....
Thanks!

Xdebug installation on remote server for profiling

I am trying to install Xdebug on remote server in AWS cloud for profiling purpose. I installed Xdebug i checked using phpinfo() and i kept some setting to enable profiling option on server, it's enabled i verified.
I am saving the output logs of pro filer in a directory on remote server. Now i want to open those files using Kcachedgrind. So i installed Kcachesgrind.
The settings which i used in PHP.ini file are below.
zend_extension="/opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.profiler_output_dir = "/opt/lampp/htdocs/profiler/logs"
xdebug.profile_output_name = cachegrind.out.%t-%s
xdebug.remote_enable=On
xdebug.remote_host="ip-10-125-11-57"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.show_local_vars=On
xdebug.collect_return=On
xdebug.collect_params=4
xdebug.profiler_enable=On
xdebug.profiler_enable_trigger=1
In the above settings you can see filed called xdebug.remote_host normally it is localhost but i am in remote server so i kept host name of my server there. I am getting an below error when i tried to open the file using Kcachegrind.
Kcachegrind: Can't connect to X server
You basically have two sane options:
Download the file from the remote server to your local computer and debug them there. If you are annoyed by having to download the file each time, automate the task somehow.
Use a command-line utility for evaluating the file (The xdebug documentation mentions ct_annotate), see here: http://xdebug.org/docs/profiler
I'd strongly suggest option 1.
Be advised, that Kcachegrind is a program with a GUI (Graphical User Interface), meaning: It has windows and buttons and stuff like that. Your remote server usually does not need any GUI software, therefore there is no support for windows and buttons and stuff like that installed (no X server, no KDE, etc...). While TeTeT solution is theoretically possible, please do NOT install X on your remote server and connect via vnc. It is slow, it will use up lots of hard disk space and memory and is a steep learning curve for beginners.
If you really want to debug that on the server, you will need to install X and a desktop for it and connect via vnc.
Maybe it would also work to copy the debug and profile files to a local system and inspect them there.

Working on a remote PHP project (Ubuntu Server) via Eclipse, Netbeans or any other IDE

I am wokring on a PHP project, which is located on an Ubuntu server to which I have SSH access.
Sometimes I code in Ubuntu and sometimes in Windows (mostly Ubuntu).
Do you have any idea how to connect to the project on the server and edit the files. I searched the net, got some ideas like using SSHFS, but I want something which works both on Linux and Windows.
I also found Eclipse Remote System Explorer, but I think it is not that stable and might cause problems (correct me if I am wrong).
Basically I (like) code in Eclipse, but I can move to Netbeans or any other good (but Free) IDEs, if I have to.
Thanks.
Aptana Studio 3 has everything you need
ssh w/ built in terminal
sftp (connect FTP through SSH)
Eclipse Based
GIT/SVN support
PHP Support
etc...
Related to your comment:
How Connect to remote host from Aptana Studio 3
http://vimeo.com/aptana
At my company each developer has a windows PC to work from with a linux dev VM that mirrors production's setup. The linux servers have a samba share setup to the /var/www directory. There are two common workflows we follow.
The developer checks out the code repo to their local PC. They use Netbeans (previously Eclipse) to edit the files and an IDE feature copies the edited file to the webserver via samba.
Pro: fast
Con: webserver can get out of sync, only one way syncing: windows -> VM
The developer checks out the code repo to the samba folder. They open the code from the IDE and edit from there.
Pro: two way syncing, can edit from server if need be, can use any editor/IDE
Con: slow
We ran for a while under setup 2, but quickly found that it was far too slow for us so most use setup 1. The only exceptions are remote teams that find it easier to connect directly to the VMs.
I use Emacs with Tramp plug-in.
I use eclipse with Aptana. There you can easily use the build in FTP support to connect to the server.
Another solution would be mouting the server directory to your PC. On Windows systems you can use something like WebDrive.

xdebug, php on remote server, netbeans

I have my 1and1 hosted web site. I've got server-side php I need to debug.
All I've found mentions running/installing xdebug when you have a local web server
with php and mysql on a local web server.
However, I'm using the remote web server hosted at 1and1 hosting.
I'm using and loving netbeans, wow great IDE.
Anyways, how (if it's even possible) can I install then use the xdebug
debugger to debug my php code running at 1and1 from within Netbeans?
I'm wondering if it is my hosting company (1and1) that has to have xdebug installed.
I'm running the latest version of Netbeans but when I press the debug button on
the toolbar I see an error message popup that says
"There is no connection from xdebug detected within 40 seconds. The reasons could be that xdebug is neither installed nor properly configured. Be sure that your php.ini file contains these entries:
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost (or hostname)
xdebug.remote_port=9000
So I searched my harddisk, and despite having installed the full Netbeans
IDE, I have no php.ini file.
So can I make xdebug work remotely, ie. can I debug my php code as it runs on the
remote 1and1 web server, using Netbeans and xdebug?
I've only been using Netbeans for 2 days and for all I know, xdebug is not even a part
of Netbeans. Reason I say that is, I can 'run' my php remotely just fine -- it executes on the remote 1and1 web server when I push 'run' inside Netbeans -- and then the client side output on my local machine is correct. But I cannot step into the code with xdebug by pressing the 'Debug' button on the Netbeans toolbar -- is it possible xdebug did not get installed correctly with Netbeans?
xdebug should be installed inside the php folder and of course the php folder is located on the server where php is installed... at your hosting provider.
I would not expect an hosting provider to install xDebug as it seems to me it would be a huge security hole.
xDebug is not part of Netbeans and it is not part of PHP by default.
Now, looking at things on a more positive viewpoint, if you are going to develop PHP, you NEED a local server. It's very unprofessional to develop code directly on the live server.
Grab a copy of xampp and install it on your computer. Grab a copy of xdebug and install it following the instructions. Restart Apache. There, now you have a testing server.
Once you have a complete set-up on your computer, copy your PHP application's folder inside the "htdoc" folder.
NOW, and only now, should you consider developing in PHP. Develop locally, on your own testing server, xdebug will work whenever you start a debugging session from inside Netbeans.
When everything works, upload your files on your hosted space.

How to get Visual Studio Development Server to work with PHP?

I'm a .NET specialist working with a PHP/Flash programmer to deliver an app via IIS. After jumping through 17 hoops of fire and defeating a gargoyle in a gruesome battle to the death, I managed to get my IIS 7.5 server to cooperate with PHP, and now if you browse to my public web site, you can see the Flash objects happily doing their behind-the-scenes stuff with PHP, whatever that may be.
But... when I'm debugging my app using the VS Development Server, that still apparently doesn't know how to cope with PHP: I'm getting the same HTTP 405 (Method Not Allowed) errors that I was getting on IIS before aforementioned gargoyle breathed its last ("The HTTP verb POST used to access path '/php/blah.php' is not allowed.").
So, what do you have to do to get the VS Dev Server to play nice with PHP?
My PHP Debugging Setup
I'm a .NET developer who has been swimming in the PHP pool for the past few months.
Spoiled by the VS.NET IDE, debugger, and strongly typed platforms, I was determined to create a PHP development environment that closely resembles my .NET debugging experience.
NOTE: It may be easy to setup PHP debugging in IIS for new PHP applications. However, the steps listed below break down some very involved steps as I found required to debug in WordPress and Joomla. Only follow these steps if you aren't having any luck with getting debugging to work.
Disclaimer:
The full set of steps to complete this setup are quite involved. I'm throwing this together ad hoc in hopes it will help others in need of setting up a professional development environment with little background in Linux based systems.
These steps are not guaranteed to work and may be very sensitive to environment settings. I spent a lot of time going through the effort of trial and error until I got this working.
Along the way, I have to give credit to a few good online resources you should review to get started. These do not address debugging or development setup. I'll provide details below.
Step by Step Guide: Installing XAMPP and WordPress on Windows
Since I'm new to posting here, I can't add more than one link. Just Google the following references:
- Google: sixrevisions tutorials web-development-tutorials using-xampp-for-local-wordpress-theme-development
Securing Your XAMPP Installation
Google: robsnotebook xampp-builtin-security
DEVELOPMENT SETUP
WAMP Stack vs IIS for PHP:
First, I did not use IIS to host my PHP application. I wanted to keep these web servers separate and use one of the available WAMP Stacks to develop against. This allowed me to manage and study configuration settings that would be used on Apache and Linux. If I was deploying the PHP App to a Windows host, I would have chosen an IIS setup. Again, this was a choice based on creating similar configured environments with a Linux host.
What is WAMP Stack?
For those unfamiliar, a WAMP Stack stands for a distribution package of Apache, MySQL, and PHP running on Windows. Other flavors include LAMP (for Linux), MAMP (for MAC), and others. There are several flavors within the community that provides WAMP Stacks to work with. I originally found BitNami interesting to work with. However, I was not happy with the Control Panel used to manage the different services within the Stack.
Selecting XAMPP for Windows
At the end of the day, I went with a package called XAMPP (Cross Platform Apache, MySQL, PHP, and PERL). The second P in XAMPP provides PERL support that is lacking in the other WAMP Stacks (WAMPServer, bitnami, and a few others). I also like XAMPP because it has what appears to be a more active community and the stack has been very stable for me. Additional standout features of XAMPP to consider is support for hosting an FTP Server, apache based mail server. The option to run MySQL and Apachi as services or local running app is easily toggled with a click of a button.
Setting Up XAMPP for Development
Setup of XAMPP is straight forward. My experience is with the previous release 1.7.3. They just released 1.7.4. Go to:
Google: apachefriends xampp-windows
and scroll down the page till you see the install links. If you want to work with a release that has matured with some time, you can still find 1.7.3 at the following link:
Build Link: www (dot) apachefriends (dot) org (/) download (php) ?xampp-win32-1.7.3.exe
Installing XDebug for PHP Debugging
This applies to installing PHP on WAMP with Apache or on IIS. Selecting the correct version of this dll isn't straight forward.
First, go to:
Google: xdebug org download (php)
and review the various versions available.
The versions are not very intuitive to parse. Follow this guide to understand it:
Breakdown of XDebug Name: [php_xdebug-2.1.0-5.3-vc6.dll]
- XDebug version 2.1.0
- Compatible with PHP 5.3
- VC6: Use for Apache ver 1 or 2
- VC6 indicates compiled with legacy Visual Studio 6 Compiler
- VC9: Use for IIS
- VC9 indicates compiled with Visual Studio 2008.
- NTS (not listed in the name above) indicates Non Thread Safe.
- The version listed is thread safe.
PHP.ini Config Setting
NOTE: Since I've not set this up on IIS, I'm not sure what the specific settings are to apply. However, this is document throughout the web.
For WAMP/XAMPP:
Locate \php\php.ini file.
Comment out line by adding semi colon to start of line.
;zend_extension = "php\ext\php_xdebug.dll"
Locate [XDebug] Section
Use settings similarly listed below and set to your path:
[XDebug]
;Common Settings
zend_extension = "P:[Fully Qualified Path]\xampp\php\ext\php_xdebug-2.1.0-5.3-vc6.dll"
xdebug.profiler_enable = 1;
xdebug.profiler_output_dir = "P:[Fully Qualified Path]\xampp\tmp"
xdebug.profiler_output_name = "xdebug_profile.%p";
xdebug.remote_enable = 1;
xdebug.remote_host = "127.0.0.1";
xdebug.remote_port = 9000;
;Make sure your IDE setup on port 9000. Some will default to 7870.
xdebug.trace_output_dir = "P:[Fully Qualified Path]\xampp\tmp";
;************
;Needed for IDE Support
;************
xdebug.idekey = "vsphp";
;This value can be arbitrary or may require something specific for your IDE.
xdebug.remote_autostart = 1;
xdebug.var_display_max_depth = 5;
Debugging with IDE
I use 2 IDEs to develop in PHP:
phpDesigner7
Google: mpsoftware phpDesigner
VS.PHP (a PHP plugin for VS.NET 2010).
Google: jcxsoftware vsphp
I want to love VS.PHP in VS.NET 2010, however, it's not the greatest experience in step through debugging. phpDesigner7 has been much better for debugging and access to local variables, intellisense, and using running eval commands during debugging. VS.PHP is so close to being great, but you will be frustrated if you have little patience. I still prefer it as my development editor of choice, even for PHP.
Regardless of IDE, most IDEs provide internal debugging support without any of the extra steps I listed above. However, these applications will launch the php app in a private webserver using IDE specific php.ini settings.
I'm doing a lot of custom integration with WordPress, Joomla, and .NET applications. Therefore, I need the debugger to use the php.ini settings for my various platforms. For me to debug these platforms, I configure my IDEs to essentially run in remote debug mode. The IDE and web server coordinate run time execution with the help of XDebug acting as a broker and providing the necessary debugging symbols to the IDE debugger.
Configuring IDE for Debugging
Final step is to configure your IDE so the debugger can connect to the web server.
The 3 settings to look for are as follows:
PHP-CGI: P:[Fully Qualified Path]\xampp\php\php-cgi.exe
PHP.INI: P:[Fully Qualified Path]\xampp\php\php.ini
Listen Port: 9000
Different IDEs may label these settings differently and require additional settings. These should be the most important ones to look for.
NOTE: Use [php\php-cgi.exe], not [php\php.exe] for debugging. The php-cgi.exe is required to run php.exe on windows.
I hope this gets you started with attaching your IDE to the web server, setting breakpoints, and doing a lot with line by line debugging.
You will not be able to make Visual Studio Development Server work for PHP. However you can easily use IIS Express (http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx) which will not only give you PHP, but also install WinCache, URL Rewrite and other features that are super important for PHP development.
Also, note that other platforms like Classic ASP are supported as well, where in Cassini they are not.
One option is to not run cassini and instead just get IIS installed on your dev box and run everything through there.

Categories