<?php
/*
* ***************************************************************************************************
*
* File name: mainexample.php
*
* Copyright © 2015 Alessandro Quintiliani
*
* This file is part of LogDeltaTime.
*
* LogDeltaTime is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* LogDeltaTime is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LogDeltaTime. If not, see <http://www.gnu.org/licenses/>.
*
* ***************************************************************************************************
*/
$thisPHPscriptName = basename($_SERVER['PHP_SELF']); // this instruction simply generates mainexample.php
$scriptPHPtoDebug = "";
include("Class.LogDeltaTime.php"); #### CLASS TO DEBUG THIS PHP SCRIPT ###
if ($_POST['btn_mainexample'] == $thisPHPscriptName) {
$scriptPHPtoDebug = $thisPHPscriptName;
define(MYVAR_VALUE, 10); // set a constant MYVAR_VALUE only as an example
define(MAX_FACTORIAL, 14); // set a constant MAX_FACTORIAL only as an example
define(DELTA_MIN_TO_TRACK, 2); // set minimum time difference in seconds (constant named i.e. DELTA_MIN_TO_TRACK) between two consecutive log messages to be tracked to the log file
define(MIN_EXECUTION_DELAY, 2); // set min delay execution script, in seconds (constant named i.e.MIN_EXECUTION_DELAY)
define(MAX_EXECUTION_DELAY, 4); // set max delay execution script, in seconds (constant named i.e.MAX_EXECUTION_DELAY)
$LOGDIR = "log"; # directory containing the log generated by this PHP script when instantiating LogDeltaTime class. It's created only if not exists at the same level of this PHP script
$LOGFILE = "logmainexample.txt"; # log file created, if not exists, inside $LOGDIR
# instance of LogDeltaTime class. This instance also sets the start microtime execution of this PHP script
$log = new LogDeltaTime($LOGDIR, $LOGFILE, 1); // replace the value of the third parameter with 2 to append the statements to logmainexample.txt after each run of mainexample.php
$log->wlog ( "first statement" );
$log->wlog ( "initializing myvar and c variables" );
$myvar = rand ( 7, MYVAR_VALUE );
$c = 0;
$log->wlog ( "check if myvar=" . MYVAR_VALUE . ": if so, a block code with a sum instruction is executed" );
$log->wlog ( "begin 'if' block having myvar as a control variable and executed only if myvar=" . MYVAR_VALUE );
$log->setDeltaLog(false); // from this point on, the log statement format doesn't have delta time
$log->wlog ( "value of myvar: $myvar" );
if ($myvar == MYVAR_VALUE) {
$log->wlog ( "entered the block code having myvar=$myvar" );
$log->wlog ( "first log message in the 'if' block having myvar=$myvar" );
$log->wlog ( "set values of a and b" );
$a = rand ( -5, 9 );
$b = rand ( -5, 9 );
$log->wlog ( "executing simple sum between a=$a and b=$b and the result placed in c" );
$c = $a + $b;
$log->wlog ( " c (= a + b) equals $c" );
$log->wlog ( "last log message in the 'if' block having myvar=$myvar as a control variable" );
}
$log->wlog ( "end 'if' block having myvar as a control variable and executed only if myvar=" . MYVAR_VALUE );
$log->setDeltaLog(true); // from this point on, the log statement format is switched back to that having delta time
$log->wlog ( "begin new if block having c as a control variable used as input to calculate its factorial number (allowed values of c: [0-" . MAX_FACTORIAL . "])" );
$log->wlog ( "value of c: $c" );
if ($c < 0) {
$log->wlog ( "first log message in the 'if' block having c as a control variable" );
$log->wlog ( " c=$c: cannot calculate the factorial of a negative number" );
$factorial = "undefined";
} elseif ($c > MAX_FACTORIAL) {
$log->wlog ( "first log message in the if block having c>" . MAX_FACTORIAL );
$log->wlog ( " c=$c: " . MAX_FACTORIAL . " is the maximum allowed value for c" );
} else {
$log->wlog ( "first log message in the if block having c>=0 and c<=" . MAX_FACTORIAL );
$log->wlog ( " c=$c (c > 1 and c <= " . MAX_FACTORIAL . "): its factorial value can be calculated" );
if ($c <= 1) {
$log->wlog ( "c=$c --> c!=1 " );
$factorial = 1;
} else {
$factorial = $c;
$log->wlog ( "begin for loop to calculate $c! in an iterative way" );
for($i = $c; $i > 2; $i --) {
$stepfact = $c - $i + 1;
$log->wlog ( "execution factorial step $stepfact" );
$factorial *= ($i - 1);
$log->wlog ( "intermediate factorial value: $factorial" );
}
$log->wlog ( "end for loop with factorial=$factorial" );
}
}
$log->wlog ( "end new if block code having c as a control variable used as input to calculate its factorial number (allowed values of c: [0-" . MAX_FACTORIAL . "])" );
$log->wlog ( "at this point, c=$c, $c!=$factorial" );
$log->wlog("start instructions which could potentially delay this PHP script execution");
$simulated_random_delay = rand(MIN_EXECUTION_DELAY, MAX_EXECUTION_DELAY);
$log->setDeltaMin ( DELTA_MIN_TO_TRACK ); // from this point on, only those statements having at least DELTA_MIN_TO_TRACK secs elapsed between each other will be written to the log file
sleep ( 1 ); // this instruction simulates any block code delaying the execution of 1 second
$log->wlog ( "this log message won't be written to the log file because the time difference since setDeltaMin was invoked is less than " . DELTA_MIN_TO_TRACK . " seconds" );
$log->wlog ( "log message placed before the sleep(x) instruction where x is varying randomly between 1 and " . MAX_EXECUTION_DELAY . " seconds" );
sleep ( $simulated_random_delay ); // this instruction simulates any block code delaying the execution to a random value between MIN_EXECUTION_DELAY and MAX_EXECUTION_DELAY seconds
$log->wlog ( "log message placed after the sleep(x) instruction where x is varying randomly between " . MIN_EXECUTION_DELAY . " and " . MAX_EXECUTION_DELAY . " seconds: will this message be written to the log file?" );
$log->wlog("end instructions which could potentially delay this PHP script execution");
$log->setDeltaMin ( 0 ); // from this point on, all log statements will be written to the log file
$log->wlog("start block code having 'onevar' as a control variable");
$log->wlog("setting 'onevar' as a variable with its current value to be prepended at the log statements");
$log->setCtrlVar('onevar');
$ARRAY_BLOCKVALUES = array('VAL1', 'VAL2', 'VAL3', 'VAL4', 'VAL5'); // possible values assumed by $onevar
$MAX_INDEX_BLOCKVALUES = count($ARRAY_BLOCKVALUES) - 1;
$indexCtrlVal = rand(0,$MAX_INDEX_BLOCKVALUES);
$onevar = $ARRAY_BLOCKVALUES[$indexCtrlVal]; // value of $onevar randomly assigned between 'VAL1' and 'VAL5'
$log->wlog("start block code"); // this message will have the value of $onevar prepended when written to the log file
if ($onevar == 'VAL2') {
$x = 5;
$y = 6;
$log->wlog("x=$x y=$y"); // this message will have the value of $onevar (only 'VAL2') prepended when written to the log file
} elseif ($onevar=='VAL4') {
$x = 7;
$y = 8;
$log->wlog("x=$x y=$y"); // this message will have the value of $onevar (only 'VAL4') prepended when written to the log file
} else {
$x = 11;
$y = 12;
$log->wlog("x=$x y=$y"); // this message will have the value of $onevar (one among 'VAL1', 'VAL3', 'VAL5') prepended when written to the log file
}
$log->wlog("end block code");
$log->end();
unset($log);
} // if ($_POST['btn_mainexample'] == 'mainexample.php')
?>
<!DOCTYPE HTML>
<html>
<head>
<title>LOGDELTATIME - LOG DEBUGGING EXAMPLE</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function showHelp(id_button) {
var title_button = "This PHP script generates logmainexample.txt with the \nlog " +
"statements written in the first format (delta time between consecutive log statements)." +
"\n- Then the method setDeltaLog(false) is invoked and all the statements, since the point where setDeltaLog(false)" +
"\nis encountered, are written with NO delta time between consecutive log statements." +
"\n- Then the log format is switched back to that having delta time by invoking setDeltaLog(true)." +
"\n- Then a random delay between 2 and 4 seconds is generated by sleep function and the method setDeltaMin(2) is invoked, and" +
"\n only statements with time elapsed since their predecessors are tracked to logmainexample.txt." +
"\n- Last, 3 instruction sets with three different values of a control variable are written to logmainexample.txt";
var be = document.getElementById(id_button);
var a = be.setAttribute("title", title_button);
be.appendChild(a);
}
</script>
</head>
<body>
<h1 style="font-size:200%; text-align: center;">EXAMPLE OF DEBUGGING PHP FILE</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" target="_self">
<div>
<table style="margin-left: auto; margin-right: auto; text-align: center;">
<tr>
<td> </td>
</tr>
<tr>
<td> <button id="btn_mainexample" name="btn_mainexample" value="mainexample.php" type="submit" onmouseover="javascript:showHelp('btn_mainexample');">RUN MAINEXAMPLE.PHP</button> </td>
</tr>
</table>
</div>
</form>
<div style="text-align:center">
<?php
if ($scriptPHPtoDebug) {
echo "<br>Script " . $scriptPHPtoDebug . " executed. See the log file <a href=\"" . $LOGDIR."/".$LOGFILE . "\" target=framename style=\"text-decoration:none;\">" . $LOGFILE . "</a>";
}
?>
</div>
</body>
</html>
|