Actions

Difference between revisions of "Do not use die to debug"

From Joomla! Documentation

(Replaced J1.5 global $mainframe with J1.6+ factory method)
 
(2 intermediate revisions by 2 users not shown)
Line 16: Line 16:
 
echo 'Test';
 
echo 'Test';
 
$mainframe->close();
 
$mainframe->close();
 +
/*
 +
or use:
 +
jexit();
 +
*/
 
</source>
 
</source>
  
Line 23: Line 27:
 
function stop($msg = '')
 
function stop($msg = '')
 
{
 
{
    global $mainframe;
 
 
     echo $msg;
 
     echo $msg;
 +
    $mainframe =& JFactory::getApplication();
 
     $mainframe->close();
 
     $mainframe->close();
 +
  /*
 +
Alternative:
 +
echo $msg;
 +
jexit();
 +
*/
 
}
 
}
 
</source>
 
</source>
 
<noinclude>[[Category:Development]]</noinclude>
 
<noinclude>[[Category:Development]]</noinclude>
 +
[[Category:Tips and tricks]][[Category:Component Development]]

Latest revision as of 11:51, 16 March 2012

Joomla! 1.5 includes the ability to optionally store the user session in the database. In PHP 5, because of the order in which it does things, a connection to the database will be closed before it fires the session handlers.

As a result of this, the common-place practice of using the die( 'test1' ); function will result in a plethora of errors being thrown, similar to the following:

Warning: mysqli_query() [<a href='function.mysqli-query'>function.mysqli-query</a>]:
Couldn't fetch mysqli in C:\Apache2\htdocs\www_site\libraries\joomla\database\database\mysqli.php on line 147

or:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]:
Access denied for user 'root'@'localhost' (using password: NO) in /var/www/html/libraries/joomla/database/database/mysql.php on line 105

In order to stop execution gracefully, you need to use the following code:

echo 'Test';
$mainframe->close();
/*
or use:
jexit();
*/

If you are developing your own component, you might like to include your own utility function to provide this functionality:

function stop($msg = '')
{
    echo $msg;
    $mainframe =& JFactory::getApplication();
    $mainframe->close();
  /*
Alternative:
echo $msg;
jexit();
*/
}