From 38096828015b7ba9343a3bcb2a04d23eeeac5ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Mon, 14 Sep 2015 16:17:28 +0200 Subject: [PATCH] Removed bullshit --- LICENSE | 9 ++-- Makefile | 2 +- README.mdown => README.md | 0 composer.json | 24 ---------- index.php | 94 +++++++++++++-------------------------- lib/MelodyPlugin.php | 65 --------------------------- 6 files changed, 36 insertions(+), 158 deletions(-) rename README.mdown => README.md (100%) delete mode 100644 composer.json delete mode 100644 lib/MelodyPlugin.php diff --git a/LICENSE b/LICENSE index 17c2a9f..af19954 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,5 @@ Copyright (c) 2010, Jordi Boggiano +Copyright (c) 2015, Ondřej Hruška All rights reserved. Redistribution and use in source and binary forms, with or without @@ -8,9 +9,9 @@ modification, are permitted provided that the following conditions are met: * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Slippy nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. + * Neither the name of this project nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -21,4 +22,4 @@ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile index 6be4d22..f102708 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ web: .PHONY - php -S localhost:8088 -t . index.php + php -S localhost:1337 .PHONY: diff --git a/README.mdown b/README.md similarity index 100% rename from README.mdown rename to README.md diff --git a/composer.json b/composer.json deleted file mode 100644 index 6a6c06b..0000000 --- a/composer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "seld/php-console", - "description": "A console to quickly try and run PHP code in your browser", - "keywords": ["console", "php"], - "homepage": "http://github.com/Seldaek/php-console", - "type": "project", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "require": { - "php": ">=5.2.0", - "sensiolabs/melody": "@dev" - }, - "extra": { - "branch-alias": { - "dev-master": "1.5.x-dev" - } - } -} diff --git a/index.php b/index.php index 0de38e6..b349fbf 100644 --- a/index.php +++ b/index.php @@ -1,10 +1,15 @@ 4, - // whitelist of IPs which don't need to be authenticated + // whitelist of IPs // use '*' to allow any IP 'ip_whitelist' => array('127.0.0.1', '::1'), @@ -21,93 +26,54 @@ if (file_exists(__DIR__.'/config.php')) { $options = $defaults; } -/** - * PHP Console - * - * A web-based php debug console - * - * Copyright (C) 2010, Jordi Boggiano - * http://seld.be/ - j.boggiano@seld.be - * - * Licensed under the new BSD License - * See the LICENSE file for details - * - * Source on Github http://github.com/Seldaek/php-console - */ + +// --- IP Whitelist --- + if (!in_array('*', $options['ip_whitelist'], true) && !in_array($_SERVER['REMOTE_ADDR'], $options['ip_whitelist'], true) ) { - header('HTTP/1.1 401 Access unauthorized'); - die('ERR/401 Go Away'); + header("HTTP/1.0 401 Unauthorized"); + die('Access Denied'); } -define('PHP_CONSOLE_VERSION', '1.4.0'); -require 'lib/MelodyPlugin.php'; -require 'vendor/autoload.php'; -ini_set('log_errors', 0); -ini_set('display_errors', 1); -error_reporting(E_ALL | E_STRICT); $debugOutput = ''; -function runCode($__source_code, $__bootstrap_file) -{ - if ($__bootstrap_file) { - require $__bootstrap_file; - } - eval($__source_code); -} - if (isset($_POST['code'])) { ini_set('html_errors', false); - if (get_magic_quotes_gpc()) { - $code = stripslashes($code); - } - $code = $_POST['code']; -// // if there's only one line wrap it into a krumo() call -// if (preg_match('#^(?!var_dump|echo|print|< )([^\r\n]+?);?\s*$#is', $code, $m) && trim($m[1])) { -// $code = 'krumo('.$m[1].');'; -// } - - // replace '< foo' by krumo(foo) -// $code = preg_replace('#^<\s+(.+?);?[\r\n]?$#m', 'krumo($1);', $code); - - // replace newlines in the entire code block by the new specified one - // i.e. put #\r\n on the first line to emulate a file with windows line - // endings if you're on a unix box - if (preg_match('{#((?:\\\\[rn]){1,2})}', $code, $m)) { - $newLineBreak = str_replace(array('\\n', '\\r'), array("\n", "\r"), $m[1]); - $code = preg_replace('#(\r?\n|\r\n?)#', $newLineBreak, $code); - } + // --- Evaluate the code --- ob_start(); $memBefore = memory_get_usage(true); $start = microtime(true); - $melodyPlugin = new MelodyPlugin(); - if ($melodyPlugin->isMelodyScript($code)) { - if ($melodyPlugin->isScriptingSupported()) { - $melodyPlugin->runScript($code, $options['bootstrap']); - } else { - throw new Exception('php-console misses required dependencies to run melody scripts.'); - } - } else { - // Important: replace only line by line, so the generated source lines will map 1:1 to the initial user input! - $code = preg_replace('{^\s*<\?(php)?\s*}i', '', $code); - - runCode($code, $options['bootstrap']); - } + // Remove the < ?php mark + // TODO remove also ? > if present + $code = preg_replace('{^\s*<\?(php)?\s*}i', '', $code); + + /** Run code with bootstrap in separate scope */ + function runCode($__source_code, $__bootstrap_file) { + if ($__bootstrap_file) { + require $__bootstrap_file; + } + eval($__source_code); + } + + runCode($code, $options['bootstrap']); - // compare with peak, because regular memory could be free'd already $end = microtime(true); $memAfter = memory_get_peak_usage(true); $debugOutput .= ob_get_clean(); + // --------------------------- + if (isset($_GET['js'])) { + + // --- Send response with metadata in headers --- header('Content-Type: text/plain'); $memory = sprintf('%.3f', ($memAfter - $memBefore) / 1024.0 / 1024.0); // in MB @@ -117,6 +83,7 @@ if (isset($_POST['code'])) { header('X-Rendertime: '. $rendertime); echo $debugOutput; + die('#end-php-console-output#'); } } @@ -154,7 +121,6 @@ if (isset($_POST['code'])) {
Line: 1, Column: 1 -
diff --git a/lib/MelodyPlugin.php b/lib/MelodyPlugin.php deleted file mode 100644 index 93fbf1f..0000000 --- a/lib/MelodyPlugin.php +++ /dev/null @@ -1,65 +0,0 @@ -find($candidateName, null, array(getcwd()))) { - return true; - } - } - - return false; - } - - public function runScript($__source_code, $__bootstrap_file) - { - $tmpDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'melody-composer'; - - // make sure the melody subprocess has a composer home, - // which is not the case when running from webcontext - $_ENV['COMPOSER_HOME'] = $tmpDir; - - $melody = new Melody(); - $configuration = new RunConfiguration(/*true, true*/); - $executor = function (Process $process, $verbose) - { - $callback = function ($type, $text) - { - // we only have one output channel to the browser, just echo "all the things" - echo $text; - }; - $process->run($callback); - }; - - //TODO missing $__bootstrap_file support - /* - if ($__bootstrap_file) { - require $__bootstrap_file; - } - */ - - $tmpFile = tempnam($tmpDir, '_script'); - register_shutdown_function(function() use ($tmpFile) { - @unlink($tmpFile); - }); - file_put_contents($tmpFile, $__source_code); - $melody->run($tmpFile, array(), $configuration, $executor); - } -}