i have a website on my localhost, a quite complicated one with many links
is there a program that can debug for example, what happens when i click one link?or i login, etc
and show me each function called in each file and everything that's happening with the scripts?
You can use Eclipse + PDT or Netbeans with the PHP plugin and then install a recent version of xdebug. This will allow you to set breakpoints, inspect variables, etc.
If you want to get an overall view of your script/framework you can use the cachegrind files xdebug is able to produce and then use a viewer for those files (e.g. kcachegrind). This will help you understand how many times a function is called, what the most time consuming parts of your application are, etc..
when i click on test debugger it says A time-out occurred when the debug server attempted to connect to the following client hosts/IPs: 192.168.0.33 and 127.0.0.1
Related
I have some php (php 7.4) program that is connected to a Webserver that causes problems when I do not use a VPN.
Sadly, we just using the server without any rights to config it.
So if you need something specific I can ask for this Information.
There are some Serverinformations
DB-Server
Server-Type: MariaDB
Server-Version: 10.4.20 MariaDB - MariaDB Server
Webserver
Apache/2.4.37(centos)
PHP-Ext: mysqli, curl, mbstring
PHP-Version: 7.3.20
phpinfo():
PHP 7.4.18
Other People testing the program getting same results.
My php program is working flawlessly with VPN and local.
Now here is the issue:
It is some straight-forward program. You need to answer the questions to get further and after some time you can end the program. A Survey, you can start it by typing the URL in any Browser you find.
#Thats bringing me to this point#
Program interrupts randomly (no specific site or element) while work through. Leaving TimeOut Website and deprecated non-js Modules console-message. Apparently things are deprecated.
#Now I use VPN#
Program does not interrupt at any point. This procedure is working for every Person testing the Program. This means, I do not get the message "deprecated non-js modules".
Either things are not deprecated or there are other reasons making the Program work without timeout.
Error-Code
Website
ERR_CONNECTION_TIMED_OUT
Console of Chrome
VM9:7146 crbug/1173575, non-JS module files deprecated.
My Doings and Ideas:
I checked the whole Program for deprecated elements, tags, functions...
-> Using PHPStorm and:
ini_set('display_errors', 1)
ini_set('display_startup_errors', 1)
error_reporting(E_ALL)
-> There were something. Every used deprecated something could be replaced easily. Lucky me.
IP-Adress is stable while working through the program.
Program is working local. Tested it 50 times without any interruptions.
Program is working with VPN. Tested it...
Session variables expire after 6 hours.
classic mysqli_connect.
session cookies.
using css and js files.
using other php files for configs and better organisation.
####New Facts
I tested some other php program (more complex - needed to add "preventDefault()" to make it work for Chrome/Safari). Using same files and every function of the contaminated php program. And no timeouts without VPN.
-> Now I think it is the specific program. But why? There is nothing new in use.
Differences:
The corrupted program shows some text and answer options you need to click to get to the next site. Website timeouts occur randomly when I press the radio button to send the value.
New program shows also some text and these answer options. But you can interact with it. After you press the radio button, you get pictures and buttons which are telling you what to do. I added a simple event handler (js) to show these pictures and buttons and hide em (depends on the condition the program gives you). It is using the same functions to send values, present pictures/texts, hop to the next page. It has generally more pages, therefore more texts, pictures.
The VPN I use must be very close to the server. But cannot tell for sure. It is something like an university-vpn to access specific things.
Tested it with handy-network (5G). No timeouts! I asked people to test it, so we get some stability-statistics.
It is important that people (not only me) outside this vpn-network can access the program and end it successfully!
Can you show me some lead I can follow?
Thank you. :)
I solved my problem, contacting the server-support.
Firewall rules are very strict and blacklisted people who are testing the program with >1 click per second. Apparently that is the behavior of a bot.
That explains also the working other php-program, which uses same functions, files, everything. There, you couldn't be faster than 1 click per second because you need to wait for some elements to show you what to do before sending produced values.
Special thanks to ADyson! :)
I'm trying to understand a codebase and it would help to know when it's accessing remote resources. Is there a way to log all outbound requests using PHP (i.e. without using a network sniffer)? I want to log all curl_exec, file_get_contents, ftp_get, etc.
If you want to find all of the actual function calls in the code, you could use the xdebug profiler.
Install and enable the xdebug profiler (not on a production server).
Run through every feature of your application.
Open the profiler output file in an application (QCacheGrind, PHPStorm, etc.).
Search for calls to curl_exec, file_get_contents, etc.
These applications will show you file name and line number called, as well as the full stack trace that got to those calls.
I'm just getting started with PHP and writing echo statements to help me debug. I saw on here recommendations for Chrome Logger. I've installed the Chrome extension and I can see it in the upper right corner of the browser. I also downloaded ChromePhp.php and uploaded it to my server in the same directory as my php file I'm trying to debug.
So then in my php at the top of the page I've written include 'ChromePhp.php';
Then when I render that page from inside Chrome I expected to see the menu bar as shown on the Chrome Logger website showing Elements, Resources, Network, ..., Console, etc.
But instead i'm seeing a page that looks like this attachment and then my code way at the bottom. It's as though my include statement isn't working and it's instead just displaying the entire ChromePhp.php file in the browser.
What am I doing wrong?
I think you did 3 mistakes:
1) Chrome Logger extension works in combo with ChromePhp.php for the situation where you run PHP code hosted on a server where you only have FTP access (and cannot change PHP paramenters, nor can debug PHP code on the server).
You didn't mention if that's your case. If you're running a local PHP server on your computer, you don't need the Chrome extension for debugging.
2) Your screenshot shows this GitHub page, not your own PHP page: https://github.com/ccampbell/chromephp/blob/master/ChromePhp.php
That means you should try the Chrome extension on your own PHP website, not on the GitHub website.
3) Once you're on your PHP website, right-click in Chrome and choose Inspect. That will make you see Elements, Resources, Network, ..., Console, etc.
I have an Android application that is connectiont to a web server running MySQL DB. On the web server I have php files that run scripts and return JSON Objects to the client (application). I recently upgraded the versions of my web server and as of then, the SELECT statements are no longer returning anything to the client if they have parameteres, however if I run a SELECT with no parameters, it works fine. Has anyone ever encountered a similar problem?
To be more clear about my question:
Is there anyway I can debugphp scripts?
I thought maybe debugging via a web browser wouldn't work because the client is triggering the php files directly and not a direct access to the web.
All help is much appreciated!
Chrome has a set of tools that let you remote debug from your android.
Check them out: https://developers.google.com/chrome-developer-tools/docs/remote-debugging
You could wirte your own error handler an let him wirting some debug informations to a own log-file. than you can read the log file and check it for errors
Look at the MySQL error log and the php error log on your server
Check you activated the correct php_mysql* extensions in the newly upgraded PHP
Run the scripts on the server through a browser with the same parameters that your app uses, watch for errors
Upgrade the PHP code running on the server so it captures any errors and does something OBVIOUS with them.
I would recommend to use XDEBUG for debugging PHP code, or any analogue for yours web server. It is really simple to set-up and use it with any PHP IDE (like Netbeans) and it gives you a lot of abilities to explore your application condition. There is no difference in what browser you will open link with ?XDEBUG_SESSION_START=netbeans-xdebug parameter.
Also you can watch MySQL and Web-server logs.
If you cannot do anything above and you need to watch network action (AJAX requests), you can set-up ADB and use chrome developer console for debugging js (or to see php var_dump() in ajax calls) in you android chrome browser.
If you need to debug js in native android browser - try to redirect to "about:debug" page, and after this you will be able to see browsers js console (in some cases this button appears only when console has something to show - error or any othe message, in some cases it just doesn't work).
Update Watch Duplicate Copy Move
As mentioned by others, you can debug using the error logs given by mysql and php. There are also IDEs which come with debugging tools for scripting languages like php.
With an IDE like phpStorm by JetBrains, which I highly recommend using over just a normal text editor, you can configure data sources like a connection to your MySQL db. This is useful because you can run scripts in the IDE and see whether it's the retreival of the data from your db or something in your scripts or handling of the JSON object back in the client. So if you configure a data source and run those same scripts and you get the correct data back then you know there is either something wrong in the code where you send the data or something wrong in the code where you receive it.
**p.s. I know that I am 5 years (oh my days its been 5 years since 2013) late to this post but none the less you never know who may be having this same issue and they stumble accross this answer
1st - Setup Xdebug for remote debugging with your IDE(Eclipse, PHPStrom, etc), and put breakpoints in your script.(for example here's link for setting up eclipse envirompment).
2-nd - When sending your url request to server add parametres to your url(http://your/url.php&XDEBUG_SESSION_START=ECLIPSE_DBGP&KEY=XXXXX,
-1st parameter - XDEBUG_SESSION_START=ECLIPSE_DBGP starts debugging session. (as for me I am using eclipse IDE for developing, so my key will be ECLIPSE_DBGP).
-2nd parameter - KEY=XXXXXX - is a session number(type any number here).
After that you'll get your code breaks at your debugging point in your script.
I work on PHP code with NetBeans and Xdebug. I use Xdebug for step-by-step debugging and the like.
I'm able to debug the flow of the default request, but not the flows generated by specific _get/_post or Ajax requests.
Anybody has an idea how can this be done?
When I run the debugger, a tab in my browser opened automatically with the following URL:
http://localhost/?XDEBUG_SESSION_START=netbeans-xdebug
Thanks.
Gidi
Ok,
it goes this way:
At the projects tab (top left of the screen in my configuration), right click on the name of the project, and then properties => run configuration
There you have to fill 3 forms:
1. project url - the base url of the project on web, typically http://localhost
2. index file - use the browse button and go to the local copy of index.php or whatever file serves this role for you. This form should contain the path to this file in the local filesystem , not on the web
3. arguments - any arguments you wish to path to your script through the URL
This should give you the ability to choose a custom URL for debugging
A possible problem: in this process you may loose the synchronization between web addresses and the corresponding files in your system. Google "path mapping in php debugger" if you encounter issues of this nature, and take the first result (which the system wouldn't allow me to link directly).
However this didn't work for me. I used server configuration to overcome this issue by redirecting URLs
Gidi
p.s.
All the above doesn't explain how to pass POST variables to your script while debugging (and I indeed don't know how to do it)
Perhaps you try to start a debug session as described above. As debug target you choose the nearest page to your POST request in the workflow. Then you interact with the web service, always having the debugger in netbeans running. With the interaction the debug session holds on, so you can fill forms etc. and send the POST request. Then switch to netbeans and debug as usual.
Perhaps you have to enable 'Break at first line' in the debug options, or set up a breakpoint in the php code, where the request is dispatched, in order to ensure the debugger halts while dispatching the POST request. Then you eventually will have to give the debugger a push at every page load.
Hope it helps