Web lists-archives.com

Re: [PHP] Re: feature-request : html + css logging in apache logs (example for the rest of the unix community too)




hey guys i've been working on my PHP error handling sources again recently,
and i found that a tail -f /var/log/[apache2-error.log] is very easy to
show in a terminal window..
since i now have enough time to consider the operating-system layer of
apache logging,

i think i can let go of this feature request.

with a bit of effort, i can read in an apache log and add html-colorize it
myself.

and not putting the burden on the people who make the tools that i get to
use for free,
is almost always the better option..

see https://github.com/seductiveapps and
https://facebook.com/ReneVeermanSeductiveApps and
https://facebook.com/SeductiveAppsAcademy
for the progress reports.

thanks again for your efforts :)
and with regards i go back into silent mode,

Rene AJM Veerman
CEO + CTO of seductiveapps.com (which currently only works in the Firefox
and Chrome browsers and has broken website features, because i'm upgrading
my source-encryptor (source-obfuscator)
https://github.com/seductiveapps/webappObfuscator



On Sun, Aug 28, 2016 at 7:14 AM, Omega -1911 <1911que@xxxxxxxxx> wrote:

> well end users will likely *try* to use your "secure" method on a server
> at some point and it is obvious that in the future, everyone will have
> servers at home, NOT connected to the Internet, right? -Wait, this is 2016
> and the "cloud" has been hacked... said Apple, Microsoft and a TON of cloud
> hosting providers ;) Wink, wink.
>
> On Sun, Aug 28, 2016 at 1:08 AM, Rene Veerman <rene.veerman.netherlands@
> gmail.com> wrote:
>
>> i run my server at home dude :) and offload the 3MB that is my animated
>> button to a cloud hosting thing like imgup.net for instance :)
>>
>> On Sun, Aug 28, 2016 at 7:05 AM, Omega -1911 <1911que@xxxxxxxxx> wrote:
>>
>>> Seriously? You think you will be able to hide code when all along, you
>>> do understand that since the code is not "compiled", it still has to be
>>> "interpreted" at run time... Meaning that anyone on that server can snatch
>>> the source.
>>>
>>> On Sun, Aug 28, 2016 at 12:57 AM, Rene Veerman <
>>> rene.veerman.netherlands@xxxxxxxxx> wrote:
>>>
>>>> ---------- Forwarded message ----------
>>>> From: Rene Veerman <rene.veerman.netherlands@xxxxxxxxx>
>>>> Date: Sun, Aug 28, 2016 at 6:55 AM
>>>> Subject: announcing public release of jsonViewer and saJSON
>>>> To: php-general@xxxxxxxxxxxxx, Internals <internals@xxxxxxxxxxxxx>
>>>>
>>>>
>>>> i'm gonna re-opensource these in the future anyhow for that update to
>>>> the
>>>> PHP error handling, so i thought it would be nice to release what i got
>>>> now
>>>> (should work, may need a tiny bit of work by you)..
>>>>
>>>> perhaps *you* can include it in the following package{3}? nice challenge
>>>> perhaps..? :)
>>>>
>>>> https://github.com/seductiveapps/webappObfuscator/blob/
>>>> master/webappObfuscator-1.0.0/functions__basicErrorHandling.php
>>>> https://github.com/seductiveapps/webappObfuscator/blob/
>>>> master/webappObfuscator-1.0.0/1.0.0/functions.php
>>>> https://github.com/seductiveapps/webappObfuscator/blob/
>>>> master/webappObfuscator-1.0.0/functions__internalErrorHandling.php
>>>> light background css : https://github.com/seductive
>>>> apps/webappObfuscator/blob/master/webappObfuscator-1.0.0/
>>>> webappObfuscator-1.0.0__ajax.css
>>>> dark background css : https://github.com/seductive
>>>> apps/webappObfuscator/blob/master/webappObfuscator-1.0.0/
>>>> webappObfuscator-1.0.0.css
>>>>
>>>>
>>>> jsonViewer provides :
>>>> - a pure-PHP encoder for JSON that can handle JSON in the range of at
>>>> least
>>>> 100MB to maybe 1GB or more (provided you provide enough RAM ofcourse)
>>>> - JS that outputs HTML that actually can view such large arrays, tested
>>>> with sample JSON file[1] of 100MB in 2013
>>>> - runs in all browsers, smartphones iPhone6+ and Android 4.2+ too
>>>> - initially fully-collapsed view of your data showing just the root keys
>>>> - ability to open keys by clicking on them, or up to the required depth
>>>> (opening-links for all up to the max depth too)
>>>> - pretty colors, auto-generated from easy templates (
>>>> https://github.com/
>>>> seductiveapps/saColorGradients
>>>> <https://github.com/seductiveapps/saColorGradients>)
>>>> - a bunch of other convenient and if i may say so myself, technically
>>>> impressive features
>>>>
>>>> URLs
>>>>
>>>> https://github.com/seductiveapps/jsonViewer
>>>> which requires
>>>>   https://github.com/seductiveapps/saColorGradients
>>>> and
>>>>   https://github.com/seductiveapps/saJSON
>>>>
>>>> NOTES
>>>>
>>>> see also my feature request to internals@xxxxxxxxxxxxx, included here:
>>>>
>>>> from my master todo file at https://github.com/seductiveap
>>>> ps/folderDB/blob/
>>>> master/todo.platform.txt
>>>> <https://github.com/seductiveapps/folderDB/blob/master/todo.platform.txt>
>>>> ;
>>>> [3]
>>>> ---------- Forwarded message ----------
>>>> From: Rene Veerman <rene.veerman.netherlands@xxxxxxxxx>
>>>> Date: Sun, Aug 28, 2016 at 5:07 AM
>>>> Subject: feature-request : html + css logging in apache logs (example
>>>> for
>>>> the rest of the unix community too)
>>>> To: php-general@xxxxxxxxxxxxx, internals@xxxxxxxxxxxxx
>>>>
>>>>
>>>> Hi.
>>>>
>>>> Once again, thanks for keeping PHP free to use and so widely and easily
>>>> installed..
>>>> .,...........see
>>>> https://github.com/seductiveapps/folderDB/blob/master/todo.platform.txt
>>>> ,
>>>> search for [3] for a copy of the rest of this thread.............. and
>>>> [4]
>>>> for *this* email thread you're reading now..
>>>>
>>>> On Sun, Aug 28, 2016 at 5:28 AM, Rene Veerman <
>>>> rene.veerman.netherlands@xxxxxxxxx> wrote:
>>>>
>>>> > eh oops, this would've maybe been easier, and allows me to update
>>>> these
>>>> > sources in the future if and when needed..
>>>> >
>>>> > https://github.com/seductiveapps/webappObfuscator/blob/master/
>>>> > webappObfuscator-1.0.0/functions__basicErrorHandling.php
>>>> > https://github.com/seductiveapps/webappObfuscator/blob/master/
>>>> > webappObfuscator-1.0.0/1.0.0/functions.php
>>>> > https://github.com/seductiveapps/webappObfuscator/blob/master/
>>>> > webappObfuscator-1.0.0/functions__internalErrorHandling.php
>>>> > light background css : https://github.com/seductiveapps/
>>>> > webappObfuscator/blob/master/webappObfuscator-1.0.0/
>>>> > webappObfuscator-1.0.0__ajax.css
>>>> > dark background css : https://github.com/seductiveapps/
>>>> > webappObfuscator/blob/master/webappObfuscator-1.0.0/
>>>> > webappObfuscator-1.0.0.css
>>>> >
>>>> >
>>>> > On Sun, Aug 28, 2016 at 5:21 AM, Rene Veerman
>>>> <rene.veerman.netherlands@
>>>> > gmail.com> wrote:
>>>> >
>>>> >> all are donated to public domain :
>>>> >>
>>>> >> __FILE__==='functions__internalErrorHandling.php';
>>>> >> <?php
>>>> >> require_once (dirname(__FILE__).'/1.0.0/functions.php');
>>>> >> require_once (dirname(__FILE__).'/functions
>>>> __basicErrorHandling.php');
>>>> >>
>>>> >> function woError ($errCode, $errMsgOrArray) {
>>>> >> if (is_array($errMsgOrArray)) {
>>>> >>
>>>> >> if (ob_get_length()>0) ob_end_flush();
>>>> >> ob_start();
>>>> >> var_dump ($errMsgOrArray);
>>>> >> $errMsg = ob_get_clean();
>>>> >> } else if (
>>>> >> is_string($errMsgOrArray)
>>>> >> || is_int($errMsgOrArray)
>>>> >> || is_float($errMsgOrArray)
>>>> >> ) {
>>>> >> $errMsg = '' . $errMsgOrArray;
>>>> >> } else if (
>>>> >> is_bool($errMsgOrArray)
>>>> >> ) {
>>>> >> $errMsg = (
>>>> >> $errMsgOrArray
>>>> >> ? 'TRUE'
>>>> >> : 'FALSE'
>>>> >> );
>>>> >> }
>>>> >> //echo 't1200';
>>>> >> //echo '<pre>'; var_dump (debug_backtrace()); echo '</pre>'; in
>>>> >> badResult() instead
>>>> >> trigger_error ($errMsg, $errCode);
>>>> >> }
>>>> >>
>>>> >> function woBasicErrorHandler ($errno, $errstr, $errfile, $errline,
>>>> >> $errcontext) {
>>>> >>   //echo 'woBasicErrorHandler.main:start';
>>>> >> $stacktrace = debug_backtrace();
>>>> >> $errType = wo_php_errorType_humanReadable($errno);
>>>> >> $errSeverity = 'woErrorSeverity__error';
>>>> >> if (stripos($errType, 'warning')!==false) $errSeverity =
>>>> >> 'woErrorSeverity__warning';
>>>> >> if (stripos($errType, 'notice')!==false) $errSeverity =
>>>> >> 'woErrorSeverity__notice';
>>>> >>
>>>> >> if (stripos($errType, 'user')!==false) $errSeverity .= '
>>>> >> woErrorSeverity__user';
>>>> >> if (stripos($errType, 'parse')!==false) $errSeverity .= '
>>>> >> woErrorSeverity__parse';
>>>> >> if (stripos($errType, 'core')!==false) $errSeverity .= '
>>>> >> woErrorSeverity__core';
>>>> >> if (stripos($errType, 'compile')!==false) $errSeverity .= '
>>>> >> woErrorSeverity__compile';
>>>> >> $html =
>>>> >> '<div class="woError '.$errSeverity.'"><h1>webappObfuscator
>>>> error</h1>'
>>>> >> .'<p>'.$errType.' : '.$errstr.'</p>'
>>>> >> .woBasicErrorHandler__prettyStacktrace ($stacktrace)
>>>> >> .'</div>';
>>>> >> echo $html;
>>>> >> //reportStatus (1, $html); // RV : where the F is that function??
>>>> >> die();
>>>> >> /*
>>>> >> echo '<h1>dfo error</h1><p>'.errorType_humanReadable($errno).' :
>>>> >> '.$errstr.'<br/>stacktrace:</p><pre>';
>>>> >> var_dump ($stacktrace);
>>>> >> echo '</pre>';*/
>>>> >> }
>>>> >>
>>>> >> function woBasicErrorHandler__prettyStacktrace ($st) {
>>>> >> global $errorsBasepath;
>>>> >> $r =
>>>> >> '<div class="woStacktrace">'
>>>> >> .'<span class="woStacktrace__basePath">All filenames are under :
>>>> >> '.$errorsBasepath.'</span><br/>';
>>>> >> foreach ($st as $stackNumber => $stackData) {
>>>> >> if (array_key_exists('file', $stackData)) {
>>>> >> $relPath = '...'.str_replace($errorsBasepath, '',
>>>> $stackData['file']);
>>>> >> } else {
>>>> >> $relPath = '.../';
>>>> >> };
>>>> >> if (array_key_exists('line', $stackData)) {
>>>> >> $line = '<span class="woStacktrace__line">(line
>>>> >> '.$stackData['line'].')</span>';
>>>> >> } else {
>>>> >> $line = '';
>>>> >> }
>>>> >> $file = '<span class="woStacktrace__file">__FILE__ :
>>>> '.$relPath.'</span>
>>>> >> ';
>>>> >> $function =
>>>> >> '<span class="woStacktrace__function">'.$stackData['function'].'( '
>>>> >> .(
>>>> >> array_key_exists('args',$stackData)
>>>> >> ? woBasicErrorHandler__prettyStacktrace__arguments
>>>> ($stackData['args'])
>>>> >> : ''
>>>> >> )
>>>> >> .' )</span>';
>>>> >> //if ($stackNumber > 0) { // ignore the call to saBasicErrorHandler()
>>>> >> itself
>>>> >> $r .=
>>>> >> '<div class="woStacktrace__item">'
>>>> >> .$file.' '
>>>> >> .$line.' calls '
>>>> >> .$function
>>>> >> .'</div>';
>>>> >> //}
>>>> >> };
>>>> >> $r .= '</div>';
>>>> >> return $r;
>>>> >> }
>>>> >>
>>>> >> function woBasicErrorHandler__prettyStacktrace__arguments ($args) {
>>>> >> $r = '<span class="woStacktrace__args">';
>>>> >> foreach ($args as $argIdx => $arg) {
>>>> >> if (is_array($arg)) {
>>>> >> $r .= '<span class="woStacktrace__arg">'.ht
>>>> mlentities(json_encode($arg)).
>>>> >> '</span>';
>>>> >> } elseif (is_object($arg)) {
>>>> >> $r .= '<span class="woStacktrace__arg">'.ht
>>>> mlentities(json_encode($arg)).
>>>> >> '</span>';
>>>> >> } else {
>>>> >> $r .= '<span class="woStacktrace__arg">'.ht
>>>> mlentities($arg).'</span>';
>>>> >> }
>>>> >> $r .= '<span class="woStacktrace__argSeperator">, </span>';
>>>> >> }
>>>> >> $r .= '</span>';
>>>> >> return $r;
>>>> >> }
>>>> >>
>>>> >> function wo_php_json_last_error_humanReadable ($errNo) {
>>>> >> // taken from http://php.net/manual/en/function.json-last-error.php
>>>> >> // on 2015 July 9th, valid for php version up to 5.5.0
>>>> >> $errorTypes = array (
>>>> >> JSON_ERROR_NONE => array (
>>>> >> 'errorCode' => 'JSON_ERROR_NONE',
>>>> >> 'msg' => 'No error has occurred'
>>>> >> ),
>>>> >> JSON_ERROR_DEPTH => array (
>>>> >> 'errorCode' => 'JSON_ERROR_DEPTH',
>>>> >> 'msg' => 'The maximum stack depth has been exceeded'
>>>> >> ),
>>>> >> JSON_ERROR_STATE_MISMATCH => array (
>>>> >> 'errorCode' => 'JSON_ERROR_STATE_MISMATCH',
>>>> >> 'msg' => 'Invalid or malformed JSON'
>>>> >> ),
>>>> >> JSON_ERROR_CTRL_CHAR => array (
>>>> >> 'errorCode' => 'JSON_ERROR_CTRL_CHAR',
>>>> >> 'msg' => 'Control character error, possibly incorrectly encoded'
>>>> >> ),
>>>> >> JSON_ERROR_SYNTAX => array (
>>>> >> 'errorCode' => 'JSON_ERROR_SYNTAX',
>>>> >> 'msg' => 'Syntax error'
>>>> >> ),
>>>> >> JSON_ERROR_UTF8 => array (
>>>> >> 'errorCode' => 'JSON_ERROR_UTF8',
>>>> >> 'msg' => 'Malformed UTF-8 characters, possibly incorrectly encoded'
>>>> >> )/*,
>>>> >> JSON_ERROR_RECURSION => array (
>>>> >> 'errorCode' => 'JSON_ERROR_RECURSION',
>>>> >> 'msg' => 'One or more recursive references in the value to be
>>>> encoded'
>>>> >> ),
>>>> >> JSON_ERROR_INF_OR_NAN => array (
>>>> >> 'errorCode' => 'JSON_ERROR_INF_OR_NAN',
>>>> >> 'msg' => 'One or more NAN or INF values in the value to be encoded'
>>>> >> ),
>>>> >> JSON_ERROR_UNSUPPORTED_TYPE => array (
>>>> >> 'errorCode' => 'JSON_ERROR_UNSUPPORTED_TYPE',
>>>> >> 'msg' => 'A value of a type that cannot be encoded was given'
>>>> >> )*/
>>>> >> );
>>>> >> if ($errNo===0) {
>>>> >> $r = $errorTypes[0];
>>>> >> } else {
>>>> >> $r =
>>>> >> array_key_exists ($errNo, $errorTypes)
>>>> >> ? $errorTypes[$errNo]
>>>> >> : array (
>>>> >> 'errorCode' => 'ERROR_UNKNOWN_ERROR',
>>>> >> 'msg' => 'json_last_error() returned a code that is unknown to
>>>> >> fucntions__basicErrorHandling.php::wo_php_json_last_error_hu
>>>> >> manReadable()'
>>>> >> );
>>>> >> };
>>>> >> return $r;
>>>> >> }
>>>> >>
>>>> >> function wo_php_errorType_humanReadable ($errNo) {
>>>> >>
>>>> >>     if (phpversion() < '4.0.0') {
>>>> >> $errorTypes = array (
>>>> >> 1   =>  'Error',
>>>> >> 2   =>  'Warning',
>>>> >> 4   =>  'Parsing Error',
>>>> >> 8   =>  'Notice',
>>>> >>     2047   => 'E_ALL'
>>>> >> );
>>>> >>     } elseif (phpversion() < '5.0.0') {
>>>> >> $errorTypes = array (
>>>> >> 1   =>  'Error',
>>>> >> 2   =>  'Warning',
>>>> >> 4   =>  'Parsing Error',
>>>> >> 8   =>  'Notice',
>>>> >> 16  =>  'Core Error',
>>>> >> 32  =>  'Core Warning',
>>>> >> 64  =>  'Compile Error',
>>>> >> 128 =>  'Compile Warning',
>>>> >> 256 =>  'User Error',
>>>> >> 512 =>  'User Warning',
>>>> >> 1024=>  'User Notice',
>>>> >> 2047=> 'E_ALL'
>>>> >> );
>>>> >>
>>>> >>     } elseif (phpversion() < '5.2.0') {
>>>> >> $errorTypes = array (
>>>> >> 1   =>  'Error',
>>>> >> 2   =>  'Warning',
>>>> >> 4   =>  'Parsing Error',
>>>> >> 8   =>  'Notice',
>>>> >> 16  =>  'Core Error',
>>>> >> 32  =>  'Core Warning',
>>>> >> 64  =>  'Compile Error',
>>>> >> 128 =>  'Compile Warning',
>>>> >> 256 =>  'User Error',
>>>> >> 512 =>  'User Warning',
>>>> >> 1024=>  'User Notice',
>>>> >> 2048=> 'Strict',
>>>> >> 2047=> 'E_ALL'
>>>> >> );
>>>> >>
>>>> >>     } elseif (phpversion() < '5.3.0') {
>>>> >> $errorTypes = array (
>>>> >> 1   =>  'Error',
>>>> >> 2   =>  'Warning',
>>>> >> 4   =>  'Parsing Error',
>>>> >> 8   =>  'Notice',
>>>> >> 16  =>  'Core Error',
>>>> >> 32  =>  'Core Warning',
>>>> >> 64  =>  'Compile Error',
>>>> >> 128 =>  'Compile Warning',
>>>> >> 256 =>  'User Error',
>>>> >> 512 =>  'User Warning',
>>>> >> 1024=>  'User Notice',
>>>> >> 2048=> 'Strict',
>>>> >> 4096=> 'Recoverable',
>>>> >> 6143=> 'E_ALL'
>>>> >> );
>>>> >>
>>>> >>     } elseif (phpversion() >= '5.3.0' && phpversion() < '6.0.0') {
>>>> >> $errorTypes = array (
>>>> >> 1   =>  'Error',
>>>> >> 2   =>  'Warning',
>>>> >> 4   =>  'Parsing Error',
>>>> >> 8   =>  'Notice',
>>>> >> 16  =>  'Core Error',
>>>> >> 32  =>  'Core Warning',
>>>> >> 64  =>  'Compile Error',
>>>> >> 128 =>  'Compile Warning',
>>>> >> 256 =>  'User Error',
>>>> >> 512 =>  'User Warning',
>>>> >> 1024=>  'User Notice',
>>>> >> 2048=> 'Strict',
>>>> >> 4096=> 'Recoverable',
>>>> >> 8192=> 'Depracated',
>>>> >>       16384=> 'User-level Depracated',
>>>> >>       30719=> 'E_ALL'
>>>> >> );
>>>> >>
>>>> >>     } elseif (phpversion() >= '6.0.0') {
>>>> >> $errorTypes = array (
>>>> >> 1   =>  'Error',
>>>> >> 2   =>  'Warning',
>>>> >> 4   =>  'Parsing Error',
>>>> >> 8   =>  'Notice',
>>>> >> 16  =>  'Core Error',
>>>> >> 32  =>  'Core Warning',
>>>> >> 64  =>  'Compile Error',
>>>> >> 128 =>  'Compile Warning',
>>>> >> 256 =>  'User Error',
>>>> >> 512 =>  'User Warning',
>>>> >> 1024=>  'User Notice',
>>>> >> 2048=> 'Strict',
>>>> >> 4096=> 'Recoverable',
>>>> >> 8192=> 'Depracated',
>>>> >>       16384=> 'User-level Depracated',
>>>> >>       32767=> 'E_ALL'
>>>> >> );
>>>> >>     }
>>>> >>
>>>> >>     return $errorTypes[$errNo];
>>>> >> }
>>>> >>
>>>> >> ?>
>>>> >>
>>>> >> __FILE__==='functions__internalErrorHandling.php';
>>>> >>
>>>> >> <?php
>>>> >> /*---
>>>> >>   this is my way of providing quality runtime debugging info
>>>> >> (to the computerprogram itself, to developers, to end-users)
>>>> >> and -even more important- creating robust computerprograms that
>>>> >> can be debugged quickly when they break when they're faced with the
>>>> >> unexpected.
>>>> >> a future version of this will email all the *releveant* debug details
>>>> >> to the developer(s) whenever the unexpected hits the computer program
>>>> >> using this.
>>>> >> draft of this extension is detailed in webappObfuscator-1.0.0.php:::w
>>>> >> ebappObfuscator::readTokens()
>>>> >> */
>>>> >>
>>>> >> function badResult ($errNo, $errMeta=null) {
>>>> >> if (
>>>> >>  is_string($errNo)
>>>> >>  || is_array($errNo)
>>>> >> ) {
>>>> >>  $errMeta = $errNo;
>>>> >>  $errNo = E_USER_ERROR;
>>>> >>  $errMeta['additionalError'] = 'badResult called with no $errNo as
>>>> first
>>>> >> parameter';
>>>> >> };
>>>> >> if (is_string($errMeta)) {
>>>> >> $errMeta = array ('msg'=>$errMeta);
>>>> >> };
>>>> >> //$errMeta = filterArgs($errMeta, $filterSettings);
>>>> >>
>>>> >> $e = array (
>>>> >> 'isMetaForFunc' => true,
>>>> >> 'phpErrorClass' => $errNo,
>>>> >> 'phpErrorType' => wo_php_errorType_humanReadable ($errNo),
>>>> >> 'error' => $errMeta,
>>>> >> );
>>>> >> $traceData = debug_backtrace();
>>>> >> $e['backtrace'] = $traceData;//phpFilterBacktraceData($traceData,$
>>>> >> filterSettings);
>>>> >> $e['globals'] = getGlobals();
>>>> >> //var_dump ($e);
>>>> >> /*if (function_exists('saError')) {
>>>> >>  echo 'error handler === saError()';
>>>> >>  saError ($errNo, $errMeta); // http://seductiveapps.com
>>>> >> } else*/if (function_exists('woError')) {
>>>> >>  echo 'error handler === woError()';
>>>> >>  woError ($errNo, $errMeta);
>>>> >> } else {
>>>> >>  echo 'functions__internalErrorHandling.php::no error handler
>>>> specified,
>>>> >> var_dump-ing.<pre>';
>>>> >>  var_dump ($e);
>>>> >>  echo '</pre>';
>>>> >> }
>>>> >> return $e;
>>>> >> }
>>>> >>
>>>> >> function getGlobals() {
>>>> >> $r = array (
>>>> >> '$_GET' => $_GET,
>>>> >> '$_POST' => $_POST,
>>>> >> '$_COOKIE' => $_COOKIE
>>>> >> );
>>>> >> return $r;
>>>> >> }
>>>> >>
>>>> >> function good($r) {
>>>> >> return (
>>>> >> is_array($r)
>>>> >> && array_key_exists('result',$r)
>>>> >> );
>>>> >> }
>>>> >>
>>>> >> //function &result(&$r) {
>>>> >> function &result(&$r) {
>>>> >> return $r['result'];
>>>> >> }
>>>> >>
>>>> >> function &resultArray (&$r) {
>>>> >>   $r2 = array();
>>>> >>   foreach ($r as $k => $v) {
>>>> >>     $r2[$k] = result($v);
>>>> >>   }
>>>> >>   return $r2;
>>>> >> }
>>>> >>
>>>> >>
>>>> >> function &goodResult(&$r) {
>>>> >> $r2 = array (
>>>> >> 'isMetaForFunc' => true,
>>>> >> 'result' => &$r
>>>> >> );
>>>> >> return $r2;
>>>> >> }
>>>> >> ?>
>>>> >>
>>>> >> __FILE__==='errorHandling_css_forLightBackgrounds.css'
>>>> >> .woError { border : 2px solid red; border-radius : 5px; padding :
>>>> 5px;
>>>> >> background : yellow; color : red; }
>>>> >> .woStacktrace { font-size : 90%; font-weight : bold; }
>>>> >> .woStacktrace__basePath { color : purple; }
>>>> >> .woStacktrace__item { }
>>>> >> .woStacktrace__file { color : navy; }
>>>> >> .woStacktrace__function { color : #002300; }
>>>> >> .woStacktrace__line { color : blue;  }
>>>> >> .woStacktrace__args { color : navy; font-weight : normal; }
>>>> >> .woStacktrace__arg { color : blue; }
>>>> >> .woStacktrace__argSeperator { color : purple; background : white;
>>>> >> font-weight : bold; font-size : 100%; }
>>>> >>
>>>> >>
>>>> >> __FILE__==='errorHandling_css_forDarkOrSemitransparentBackgr
>>>> ounds.css'
>>>> >> .woError { border : 2px solid red; border-radius : 5px; padding :
>>>> 5px;
>>>> >> background : yellow; color : red; opacity : 0.767 }
>>>> >> .woStacktrace { font-size : 90%; font-weight : bold; }
>>>> >> .woStacktrace__basePath { color : purple; }
>>>> >> .woStacktrace__item { }
>>>> >> .woStacktrace__file { color : navy; }
>>>> >> .woStacktrace__function { color : #002300; }
>>>> >> .woStacktrace__line { color : blue;  }
>>>> >> .woStacktrace__args { color : navy; font-weight : normal; }
>>>> >> .woStacktrace__arg { color : blue; }
>>>> >> .woStacktrace__argSeperator { color : purple; background : white;
>>>> >> font-weight : bold; font-size : 100%; }
>>>> >>
>>>> >> On Sun, Aug 28, 2016 at 5:16 AM, Rene Veerman <
>>>> >> rene.veerman.netherlands@xxxxxxxxx> wrote:
>>>> >>
>>>> >>> nothing's better than cut-n-pasting, i knooow :)
>>>> >>>
>>>> >>> so in the next few messages i'll include my own PHP handlers.. it's
>>>> 4
>>>> >>> files, which i'll just post as ordinary text.. dunno and dont wanna
>>>> test if
>>>> >>> attaching works to the entire list architecture (web caches and
>>>> stuff)..
>>>> >>>
>>>> >>> On Sun, Aug 28, 2016 at 5:07 AM, Rene Veerman <
>>>> >>> rene.veerman.netherlands@xxxxxxxxx> wrote:
>>>> >>>
>>>> >>>> Hi.
>>>> >>>>
>>>> >>>> Once again, thanks for keeping PHP free to use and so widely and
>>>> easily
>>>> >>>> installed..
>>>> >>>>
>>>> >>>> I have another feature request (sent earlier tonight)..
>>>> >>>>
>>>> >>>> I quite often, much more than i like, *need* a stacktrace and
>>>> *proper*
>>>> >>>> variable listings for each function called in PHP when it barfs
>>>> out nothing
>>>> >>>> more than an apache error log entry..
>>>> >>>> And can we please show such entries in the browser *as well as the
>>>> >>>> apache log*? Or if nothing else, *just* in the browser?
>>>> >>>>
>>>> >>>> Rather than going "all the way" and making variable contents
>>>> (which can
>>>> >>>> grow quite large) collapsable and shit *right away*, you could
>>>> simply add
>>>> >>>> the right <span> and <p> class="" names and supply a CSS file. I
>>>> use it in
>>>> >>>> all error handling that does make it to
>>>> set_error_handler(myHandler), and
>>>> >>>> that really is what makes things like my obfuscator (also posted
>>>> about to
>>>> >>>> the php-general@xxxxxxxxxxxxx earlier tonight) possible.
>>>> >>>> And taking things that far allows guys like me to provide you with
>>>> a
>>>> >>>> collapsable large-JSON-decoding viewer addon for such logfiles
>>>> later (rest
>>>> >>>> assured that that'll get done once you do this for me).. i call it
>>>> >>>> jsonViewer and i should have it back up at
>>>> >>>> http://seductiveapps.com/tools/json (or /jsonViewer) once the
>>>> >>>> obfuscator is fully done in a few weeks, at most..
>>>> >>>>
>>>> >>>> if you want me to build (and opensource) things like that
>>>> >>>> true-obfuscator and my JSON scalable database architecture using
>>>> just
>>>> >>>> apache2+ and php5+, it would really cut my development time in
>>>> more than
>>>> >>>> half if you could add "all of this" (it's deadsimple and a few
>>>> hours work
>>>> >>>> imo) to the next versions of PHP (and please make it the default,
>>>> you can
>>>> >>>> include sample CSS or read in a CSS file that you set in php.ini
>>>> (comment
>>>> >>>> on how to do this in the logfile html please))..
>>>> >>>>
>>>> >>>> see https://github.com/seductiveapps/folderDB/blob/master/todo.p
>>>> >>>> latform.txt for all relevant updates concerning these developments
>>>> >>>> mentioned here..
>>>> >>>>
>>>> >>>> Thanks in advance for considering and likely adopting the 2 small
>>>> >>>> changes i need in the next versions of PHP.. I run ubuntu btw..
>>>> I'll be
>>>> >>>> checking the php.net pages for your future updates..
>>>> >>>>
>>>> >>>> If anyone can gimme a duration-to-completion for each of my
>>>> requests of
>>>> >>>> tonight, that'd be awesome. I'll take a "wild guess", or any
>>>> serious
>>>> >>>> objections that i might be able to sway out of the way..
>>>> >>>>
>>>> >>>>
>>>> >>>
>>>> >>
>>>> >
>>>>
>>>
>>>
>>
>