Do not use die to debug
From Joomla! Documentation
(Difference between revisions)
m (Transwiki:Dont use die to debug moved to Do not use die to debug) |
(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 = '') | ||
{ | { | ||
| − | |||
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(); */ }