summaryrefslogtreecommitdiff
path: root/framework/3rdParty/PhpShell/php-shell-cmd.php
diff options
context:
space:
mode:
authorwei <>2006-09-18 22:57:16 +0000
committerwei <>2006-09-18 22:57:16 +0000
commit1e5f13b21b33b0d7ce86fe97ca145a3561433a7a (patch)
tree0d578ace6150cf69478696737cf0e1156a309661 /framework/3rdParty/PhpShell/php-shell-cmd.php
parent8e3f638109ebdb4bedc3e9ed7360b9d2467bc311 (diff)
Add an interactive php shell that loads Prado classes.
Diffstat (limited to 'framework/3rdParty/PhpShell/php-shell-cmd.php')
-rw-r--r--framework/3rdParty/PhpShell/php-shell-cmd.php171
1 files changed, 171 insertions, 0 deletions
diff --git a/framework/3rdParty/PhpShell/php-shell-cmd.php b/framework/3rdParty/PhpShell/php-shell-cmd.php
new file mode 100644
index 00000000..1b389686
--- /dev/null
+++ b/framework/3rdParty/PhpShell/php-shell-cmd.php
@@ -0,0 +1,171 @@
+<?php
+@ob_end_clean();
+error_reporting(E_ALL);
+set_time_limit(0);
+
+/**
+* the wrapper around the PHP_Shell class
+*
+* - load extensions
+* - set default error-handler
+* - add exec-hooks for the extensions
+*
+* To keep the namespace clashing between shell and your program
+* as small as possible all public variables and functions from
+* the shell are prefixed with __shell:
+*
+* - $__shell is the object of the shell
+* can be read, this is the shell object itself, don't touch it
+* - $__shell_retval is the return value of the eval() before
+* it is printed
+* can't be read, but overwrites existing vars with this name
+* - $__shell_exception is the catched Exception on Warnings, Notices, ..
+* can't be read, but overwrites existing vars with this name
+*/
+
+//try loading it from PEAR
+@require_once('PHP/Shell.php');
+if(class_exists('PHP_Shell', false))
+{
+ require_once "PHP/Shell/Extensions/Autoload.php";
+ require_once "PHP/Shell/Extensions/AutoloadDebug.php";
+ require_once "PHP/Shell/Extensions/Colour.php";
+ require_once "PHP/Shell/Extensions/ExecutionTime.php";
+ require_once "PHP/Shell/Extensions/InlineHelp.php";
+ require_once "PHP/Shell/Extensions/VerbosePrint.php";
+ require_once "PHP/Shell/Extensions/LoadScript.php";
+}
+else
+{
+ require_once(dirname(__FILE__)."/PHP/Shell.php");
+ require_once(dirname(__FILE__)."/PHP/Shell/Extensions/Autoload.php");
+ require_once(dirname(__FILE__)."/PHP/Shell/Extensions/AutoloadDebug.php");
+ require_once(dirname(__FILE__)."/PHP/Shell/Extensions/Colour.php");
+ require_once(dirname(__FILE__)."/PHP/Shell/Extensions/ExecutionTime.php");
+ require_once(dirname(__FILE__)."/PHP/Shell/Extensions/InlineHelp.php");
+ require_once(dirname(__FILE__)."/PHP/Shell/Extensions/VerbosePrint.php");
+ require_once(dirname(__FILE__)."/PHP/Shell/Extensions/LoadScript.php");
+}
+
+/**
+* default error-handler
+*
+* Instead of printing the NOTICE or WARNING from php we wan't the turn non-FATAL
+* messages into exceptions and handle them in our own way.
+*
+* you can set your own error-handler by createing a function named
+* __shell_error_handler
+*
+* @param integer $errno Error-Number
+* @param string $errstr Error-Message
+* @param string $errfile Filename where the error was raised
+* @param interger $errline Line-Number in the File
+* @param mixed $errctx ...
+*/
+function __shell_default_error_handler($errno, $errstr, $errfile, $errline, $errctx) {
+ ## ... what is this errno again ?
+ if ($errno == 2048) return;
+
+ throw new Exception(sprintf("%s:%d\r\n%s", $errfile, $errline, $errstr));
+}
+
+set_error_handler("__shell_default_error_handler");
+
+$__shell = new PHP_Shell();
+$__shell_exts = PHP_Shell_Extensions::getInstance();
+$__shell_exts->registerExtensions(array(
+ "options" => PHP_Shell_Options::getInstance(), /* the :set command */
+
+ "autoload" => new PHP_Shell_Extensions_Autoload(),
+ "autoload_debug" => new PHP_Shell_Extensions_AutoloadDebug(),
+ "colour" => new PHP_Shell_Extensions_Colour(),
+ "exectime" => new PHP_Shell_Extensions_ExecutionTime(),
+ "inlinehelp" => new PHP_Shell_Extensions_InlineHelp(),
+ "verboseprint" => new PHP_Shell_Extensions_VerbosePrint(),
+ "loadscript" => new PHP_Shell_Extensions_LoadScript(),
+));
+
+$f = <<<EOF
+PHP-Shell - Version %s%s
+(c) 2006, Jan Kneschke <jan@kneschke.de>
+
+>> use '?' to open the inline help
+
+EOF;
+
+printf($f,
+ $__shell->getVersion(),
+ $__shell->hasReadline() ? ', with readline() support' : '');
+unset($f);
+
+print $__shell_exts->colour->getColour("default");
+while($__shell->input()) {
+ if ($__shell_exts->autoload->isAutoloadEnabled() && !function_exists('__autoload')) {
+ /**
+ * default autoloader
+ *
+ * If a class doesn't exist try to load it by guessing the filename
+ * class PHP_Shell should be located in PHP/Shell.php.
+ *
+ * you can set your own autoloader by defining __autoload() before including
+ * this file
+ *
+ * @param string $classname name of the class
+ */
+
+ function __autoload($classname) {
+ global $__shell_exts;
+
+ if ($__shell_exts->autoload_debug->isAutoloadDebug()) {
+ print str_repeat(".", $__shell_exts->autoload_debug->incAutoloadDepth())." -> autoloading $classname".PHP_EOL;
+ }
+ include_once str_replace('_', '/', $classname).'.php';
+ if ($__shell_exts->autoload_debug->isAutoloadDebug()) {
+ print str_repeat(".", $__shell_exts->autoload_debug->decAutoloadDepth())." <- autoloading $classname".PHP_EOL;
+ }
+ }
+ }
+
+ try {
+ $__shell_exts->exectime->startParseTime();
+ if ($__shell->parse() == 0) {
+ ## we have a full command, execute it
+
+ $__shell_exts->exectime->startExecTime();
+
+ $__shell_retval = eval($__shell->getCode());
+ if (isset($__shell_retval)) {
+ print $__shell_exts->colour->getColour("value");
+
+ if (function_exists("__shell_print_var")) {
+ __shell_print_var($__shell,$__shell_retval, $__shell_exts->verboseprint->isVerbose());
+ } else {
+ var_export($__shell_retval);
+ }
+ }
+ ## cleanup the variable namespace
+ unset($__shell_retval);
+ $__shell->resetCode();
+ }
+ } catch(Exception $__shell_exception) {
+ print $__shell_exts->colour->getColour("exception");
+ printf('%s (code: %d) got thrown'.PHP_EOL, get_class($__shell_exception), $__shell_exception->getCode());
+ print $__shell_exception;
+
+ $__shell->resetCode();
+
+ ## cleanup the variable namespace
+ unset($__shell_exception);
+ }
+ print $__shell_exts->colour->getColour("default");
+ $__shell_exts->exectime->stopTime();
+ if ($__shell_exts->exectime->isShow()) {
+ printf(" (parse: %.4fs, exec: %.4fs)",
+ $__shell_exts->exectime->getParseTime(),
+ $__shell_exts->exectime->getExecTime()
+ );
+ }
+}
+
+print $__shell_exts->colour->getColour("reset");
+