Example #1
0
 static function sendFile($path, $saveAs = null, $exit = true)
 {
     //Might potentially remove ".." from path, but it has already been removed by the time the request gets here by server or browser.  Still removing for precaution
     $path = Files::removeRelative($path);
     if (is_file($path)) {
         $mime = Files::mime($path);
         header('Content-Type: ' . $mime);
         if ($saveAs) {
             header('Content-Description: File Transfer');
             if (strlen($saveAs) > 1) {
                 $fileName = $saveAs;
             } else {
                 $fileName = array_pop(explode('/', $path));
             }
             header('Content-Disposition: attachment; filename="' . self::escapeFilename($fileName) . '"');
         }
         echo file_get_contents($path);
     } elseif ($_ENV['resourceNotFound']) {
         Config::loadUserFiles($_ENV['resourceNotFound'], 'control');
     } else {
         Debug::toss('Request handler encountered unresolvable file.  Searched at ' . $path);
     }
     if ($exit) {
         exit;
     }
 }
Example #2
0
 /**
 @param	eLevel	error level
 @param	eStr	error string
 @param	eFile	error file
 @param	eLine	error line
 */
 static function handleError($eLevel, $eStr, $eFile, $eLine, $context = null, $bTrace = null, $type = 'ERROR')
 {
     if (ini_get('error_reporting') == 0) {
         # @ Error control operator used
         return;
     }
     $code = self::getLine($eFile, $eLine);
     $eFile = self::abbreviateFilePath($eFile);
     $eFile = preg_replace('@' . PR . '@', '', $eFile);
     $header = "+=+=+=+ " . date("Y-m-d H:i:s") . ' | ' . $_ENV['projectName'] . " | {$type} | " . self::abbreviateFilePath($eFile) . ":{$eLine} +=+=+=+\n{$eStr}\n";
     $err = '';
     if ($_ENV['errorDetail'] > 0) {
         if (!$bTrace) {
             $bTrace = debug_backtrace();
         }
         //php has some odd backtracing so need various conditions to remove excessive data
         if ($bTrace[0]['file'] == '' && $bTrace[0]['class'] == 'Debug') {
             array_shift($bTrace);
         }
         //remove undesired stack points, and non-named points stemming from
         foreach ($bTrace as $k => &$v) {
             $v['shortName'] = self::abbreviateFilePath($v['file']);
             foreach ($_ENV['errorStackExclude'] as $exclusionPattern) {
                 if (!$v['file']) {
                     $unnamed++;
                 } else {
                     if ($found = preg_match($exclusionPattern, $v['shortName'])) {
                         array_splice($bTrace, $k - $unnamed, 1 + $unnamed);
                     }
                     $unnamed = 0;
                 }
             }
         }
         foreach ($bTrace as $v) {
             $err .= "\n" . '(-' . $v['line'] . '-) ' . $v['shortName'] . "\n";
             $code = self::getLine($v['file'], $v['line']);
             if ($v['class']) {
                 $err .= "\t" . 'Class: ' . $v['class'] . $v['type'] . "\n";
             }
             $err .= "\t" . 'Function: ' . $v['function'] . "\n";
             if ($code) {
                 $err .= "\t" . 'Line: ' . $code . "\n";
             }
             if ($v['args'] && $_ENV['errorDetail'] > 1) {
                 $err .= "\t" . 'Arguments: ' . "\n";
                 $args = self::toString($v['args']);
                 $err .= substr($args, 2, -2) . "\n";
                 /*
                 					$err .= preg_replace(
                 							array("@^array \(\n@","@\n\)$@","@\n@"),
                 							array("\t\t",'',"\n\t\t"),
                 							$args)."\n";*/
             }
         }
         if ($_ENV['errorDetail'] > 2) {
             $err .= "\nServer Var:\n:" . self::toString($_SERVER);
             $err .= "\nRequest-----\nUri:" . $_SERVER['REQUEST_URI'] . "\nVar:" . self::toString($_REQUEST);
             $err .= "\n\nFile includes:\n" . self::toString(Files::getIncluded());
         }
         $err .= "\n";
     }
     //identify error
     $errorHash = sha1($err);
     $header = 'Error Id: ' . $errorHash . "\n" . $header;
     $err = $header . $err;
     $file = $_ENV['logLocation'];
     if (!file_exists($file) || filesize($file) > Tool::byteSize($_ENV['maxLogSize'])) {
         $mode = 'w';
     } else {
         $mode = 'a+';
     }
     $fh = fopen($file, $mode);
     fwrite($fh, $err);
     if (!$_ENV['inScript']) {
         if ($_ENV['errorPage']) {
             Config::loadUserFiles($_ENV['errorPage'], '.', null, ['error' => $err, 'errorId' => $errorHash]);
             exit;
         }
         if ($_ENV['errorMessage']) {
             if (is_array($_ENV['errorMessage'])) {
                 $message = $_ENV['errorMessage'][rand(0, count($_ENV['errorMessage']) - 1)];
             } else {
                 $message = $_ENV['errorMessage'];
             }
             preg_replace('@\\$errorId@', $errorHash, $message);
             echo $message;
         }
     }
     if ($_ENV['displayErrors']) {
         self::sendout($err);
     }
     exit;
 }
Example #3
0
<?php

/// logic unrelated to a specific request
/** @file */
#Tool, used by config
require_once $_ENV['systemFolder'] . 'tool/Tool.php';
#used by autoloader
require_once $_ENV['systemFolder'] . 'tool/Arrays.php';
require_once $_ENV['systemFolder'] . 'tool/Hook.php';
require_once $_ENV['systemFolder'] . 'tool/CommonTraits.php';
#Config setting
require_once $_ENV['systemFolder'] . 'tool/Config.php';
Config::init();
#Autoloader
require_once $_ENV['systemFolder'] . 'tool/Autoload.php';
$autoload = Autoload::init(null, $_ENV['autoloadIncludes']);
spl_autoload_register(array($autoload, 'auto'));
#composer autload
if (is_file($_ENV['composerFolder'] . 'autoload.php')) {
    require_once $_ENV['composerFolder'] . 'autoload.php';
}
set_error_handler($_ENV['errorHandler'], $_ENV['errorsHandled']);
set_exception_handler($_ENV['exceptionHandler']);
Config::loadUserFiles($_ENV['preRoute']);
#pre session request handling; for file serving and such.
require_once $_ENV['systemFolder'] . 'tool/control/Route.php';
\control\Route::handle($_SERVER['REQUEST_URI']);