Skip to main content

Profiling and checking PHP error_reporting in a Codeigniter App, without editing the config!!

Hi all,

You must have definitely used the Profiling in Codeigniter and error_reporting many a times in Development and Testing environment, but I am sure you must have missed it on a real Production environment.

As there are scenarios, where you want to quickly debug the Production application and find out what PHP errors is the application throwing, check the page profile, that too without putting the time and effort in replicating the whole production environment on your local machine, or perhaps a testing server.

This small piece of code(we could perhaps call it a hack), which I have used in almost all of my CI applications, will make your life very easy, without losing anything on the security of the system.

Following points, essentially sum up what exactly it does -
  1. Check for the dev(or root or admin, whichever name you use for the su access), if it is logged in, as we don't want others to see all the Profile data and other errors.
  2. Check for a specific query string sent in the URL(I am using profiler here), the value of which will enable/disable this feature.
  3. If the value is On/True, then enable both -
    • Codeigniter Profiling
    • Error Reporting
  4. Else disable both of them for any other value(which actually is the default behaviour)
The Hack

        //we send profiler variable in the url
        if ($this->input->get('profiler') == 'on' && $this->session->userdata('username') == 'dev') {
            $this->session->set_userdata('app_profile', true);
        } elseif ($this->input->get('profiler') !== 'on') {
            $this->session->unset_userdata('app_profile');
        }


        //if the session data for app_profiler is set then enable the profile AND the error_reporting
        if ($this->session->userdata('app_profile')) {
            $this->output->enable_profiler(TRUE);
            error_reporting(E_ALL);
        }

As simple as that. :)

This code has to be placed in a file which is executed/called in all requests, like
  1. MY_Controller, if all the controllers inherit this.
  2. Or in a hook which is executed in all the calls.
I use it in MY_Controller.php file, as most of the time, all of my other controllers extend the MY_Controller.

Now when you change the URL which looks something like this
http://domain.com/app/index.php/ctrl1/fn1 to
http://domain.com/app/index.php/ctrl1/fn1?profiler=on the application will enable the error_reporting and the Codeigniter Profiler.
And to disable, all you need to do is, just change the url back to http://domain.com/app/index.php/ctrl1/fn1?profiler=off.

This hack is a very bare minimum one, which serves to my requirements. You could definitely add some bells and whistles to make it even more powerful and useful.

However, you need to be aware that if you are doing AJAX calls in the application, you need to slightly change the JSON returning functions, because if the application returns profiling data with the JSON, Javascript will not be able to parse it, and your app might break.

Hope this CI hack comes in handy for you. And also, I am sure that this small workaround can be implemented in other frameworks as well, although I have not tried implementing it myself yet!!

Happy Coding!!
Sandeep

Comments

Unknown said…
This comment has been removed by a blog administrator.
Unknown said…
This comment has been removed by a blog administrator.
Unknown said…
This comment has been removed by the author.
Unknown said…
This comment has been removed by a blog administrator.
Unknown said…
This comment has been removed by a blog administrator.

Popular posts from this blog

Multi Tenancy with Codeigniter

In this post I will show you how I converted my normal Codeigniter application into a multi-tenant system.(first step to a SaaS implementation) Note - This implementation is a separate DB multi-tenancy implementation. Lets say we have an up and running CI application name ci_app , with the directory structure like this ./application ./application/config ./application/...so many other important directories ./asset ./asset/js ./asset/images ./asset/css ./system ./index.php which is accessed through browser like http://localhost/ci_app So to implement the multi-tenant arch we are most concerned about the following files, and we will be editing them ./index.php ./application/config/config.php ./application/config/database.php And also we need to create a few new ones Create a tenant folder in your www root directory, lets say tenant_1 Cut the ./index.php from ci_app and paste it in tenant_1 directory  Create a blank file config.php in tenant_1 directory Crea

D3.js, the most powerful visualization library I came across

Hello Friends!! This post is dedicated to D3.js , which I came across a few months back. Prior to that, I always preferred Google Charts which catered to most of my charting needs. However, since I switched to D3.js I could not find a good reason to move back to Google Chart. If we take a very crude analogy, D3.js would be analogous to an Ubuntu of the OS world, while Google Charts could easily be a Windows 7(just that both of them are free in this case); in the sense that the control and the power the user(in our case the developer) gets from D3.js while working with it, is unmatchable . While Google Charts is simply too cool and simple for a free charting tool, but D3.js is a library which lets you create any chart that you could think and conceptualize, with so much of ease, and it lets you link any kind of interaction/control that you would want to put on events, on any of the elements of the chart. D3.js, like RaphaelJS and PaperJS is a library which is developed to