!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/usr/local/lsws/add-ons/webcachemgr/src/   drwxr-xr-x
Free 13.06 GB of 57.97 GB (22.54%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


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

/** *********************************************
 * LiteSpeed Web Server Cache Manager
 *
 * @author LiteSpeed Technologies, Inc. (https://www.litespeedtech.com)
 * @copyright (c) 2018-2020
 * *******************************************
 */

namespace Lsc\Wp;

use 
\Lsc\Wp\Panel\ControlPanel;
use 
\Lsc\Wp\Context\Context;

class 
WPInstall
{

    
/**
     * @var int
     */
    
const ST_PLUGIN_ACTIVE 1;

    
/**
     * @var int
     */
    
const ST_PLUGIN_INACTIVE 2;

    
/**
     * @var int
     */
    
const ST_LSC_ADVCACHE_DEFINED 4;

    
/**
     * @var int
     */
    
const ST_FLAGGED 8;

    
/**
     * @var int
     */
    
const ST_ERR_SITEURL 16;

    
/**
     * @var int
     */
    
const ST_ERR_DOCROOT 32;

    
/**
     * @var int
     */
    
const ST_ERR_EXECMD 64;

    
/**
     * @var int
     */
    
const ST_ERR_TIMEOUT 128;

    
/**
     * @var int
     */
    
const ST_ERR_EXECMD_DB 256;

    
/**
     * @var int
     */
    
const ST_ERR_WPCONFIG 1024;

    
/**
     * @var int
     */
    
const ST_ERR_REMOVE 2048;

    
/**
     * @var string
     */
    
const FLD_STATUS 'status';

    
/**
     * @var string
     */
    
const FLD_DOCROOT 'docroot';

    
/**
     * @var string
     */
    
const FLD_SERVERNAME 'server_name';

    
/**
     * @var string
     */
    
const FLD_SITEURL 'site_url';

    
/**
     * @var string
     */
    
const FLAG_FILE '.litespeed_flag';

    
/**
     * @var string
     */
    
const FLAG_NEW_LSCWP '.lscm_new_lscwp';

    
/**
     * @var string
     */
    
protected $path;

    
/**
     * @var mixed[]
     */
    
protected $data;

    
/**
     * @var null|string
     */
    
protected $phpBinary null;

    
/**
     * @var null|string
     */
    
protected $suCmd null;

    
/**
     * @var null|mixed[]  Keys are 'user_id', 'user_name', 'group_id'
     */
    
protected $ownerInfo null;

    
/**
     * @var bool
     */
    
protected $changed false;

    
/**
     * @var bool
     */
    
protected $refreshed false;

    
/**
     * @var null|string
     */
    
protected $wpConfigFile '';

    
/**
     * @var int
     */
    
protected $cmdStatus 0;

    
/**
     * @var string
     */
    
protected $cmdMsg '';

    
/**
     *
     * @param string  $path
     */
    
public function __construct$path )
    {
        
$this->init($path);
    }

    
/**
     *
     * @param string  $path
     */
    
protected function init$path )
    {
        if ( (
$realPath realpath($path)) === false ) {
            
$this->path $path;
        }
        else {
            
$this->path $realPath;
        }

        
$this->data = array(
            
self::FLD_STATUS => 0,
            
self::FLD_DOCROOT => null,
            
self::FLD_SERVERNAME => null,
            
self::FLD_SITEURL => null
        
);
    }

    
/**
     *
     * @return string
     */
    
public function __toString()
    {
        return 
sprintf(
            
"%s (status=%d docroot=%s siteurl=%s)",
            
$this->path,
            
$this->data[self::FLD_STATUS],
            
$this->data[self::FLD_DOCROOT],
            
$this->data[self::FLD_SITEURL]
        );
    }

    
/**
     *
     * @return string|null
     */
    
public function getDocRoot()
    {
        return 
$this->getData(self::FLD_DOCROOT);
    }

    
/**
     *
     * @param string    $docRoot
     * @return boolean
     */
    
public function setDocRoot$docRoot )
    {
        return 
$this->setData(self::FLD_DOCROOT$docRoot);
    }

    
/**
     *
     * @return string|null
     */
    
public function getServerName()
    {
        return 
$this->getData(self::FLD_SERVERNAME);
    }

    
/**
     *
     * @param string  $serverName
     * @return boolean
     */
    
public function setServerName$serverName )
    {
        return 
$this->setData(self::FLD_SERVERNAME$serverName);
    }

    
/**
     * Note: Temporary function name until existing deprecated setSiteUrl()
     * function is removed.
     *
     * @param string  $siteUrl
     * @return boolean
     */
    
public function setSiteUrlDirect$siteUrl )
    {
        return 
$this->setData(self::FLD_SITEURL$siteUrl);
    }

    
/**
     *
     * @param int  $status
     * @return boolean
     */
    
public function setStatus$status )
    {
        return 
$this->setData(self::FLD_STATUS$status);
    }

    
/**
     *
     * @return int
     */
    
public function getStatus()
    {
        return 
$this->getData(self::FLD_STATUS);
    }

    
/**
     *
     * @param string  $field
     * @return mixed|null
     */
    
public function getData$field '' )
    {
        if ( !
$field ) {
            return 
$this->data;
        }

        if ( isset(
$this->data[$field]) ) {
            return 
$this->data[$field];
        }

        
/**
         * Error out
         */
        
return null;
    }

    
/**
     *
     * @param string  $field
     * @param mixed   $value
     * @return boolean
     */
    
protected function setData$field$value )
    {
        
$updated false;

        if ( 
$this->data[$field] !== $value ) {
            
$this->changed $updated true;
            
$this->data[$field] = $value;
        }

        return 
$updated;
    }

    
/**
     * Calling from unserialized data.
     *
     * @param mixed[]  $data
     */
    
public function initData$data )
    {
        
$this->data $data;
    }

    
/**
     *
     * @return string
     */
    
public function getPath()
    {
        return 
$this->path;
    }

    
/**
     *
     * @return boolean
     */
    
public function shouldRemove()
    {
        return (
$this->getStatus() & self::ST_ERR_REMOVE) ? true false;
    }

    
/**
     *
     * @return boolean
     */
    
public function hasFlagFile()
    {
        return 
file_exists("{$this->path}/" self::FLAG_FILE);
    }

    public function 
hasNewLscwpFlagFile()
    {
        return 
file_exists("{$this->path}/" self::FLAG_NEW_LSCWP);
    }

    
/**
     *
     * @return boolean
     * @throws LSCMException  Thrown indirectly.
     */
    
public function hasValidPath()
    {
        if ( !
is_dir($this->path) || !is_dir("{$this->path}/wp-admin") ) {
            
$this->setStatusBit(self::ST_ERR_REMOVE);

            
$msg "{$this->path} - Could not be found and has been removed "
                
'from Cache Manager list.';
            
Logger::uiError($msg);
            
Logger::notice($msg);
        }
        elseif ( 
$this->getWpConfigFile() == null ) {
            
$this->setStatusBit(self::ST_ERR_WPCONFIG);
            
$this->addUserFlagFile(false);

            
$msg "{$this->path} - Could not find a valid wp-config.php file. "
                
'Install has been flagged.';
            
Logger::uiError($msg);
            
Logger::error($msg);
        }
        else {
            return 
true;
        }

        return 
false;
    }

    
/**
     * Set the provided status bit.
     *
     * @param int  $bit
     */
    
public function setStatusBit$bit )
    {
        
$status $this->getStatus();
        
$status |= $bit;
        
$this->setStatus($status);
    }

    
/**
     * Unset the provided status bit.
     *
     * @param int  $bit
     */
    
public function unsetStatusBit$bit )
    {
        
$status $this->getStatus();
        
$status &= ~$bit;
        
$this->setStatus($status);
    }

    
/**
     *
     * @deprecated 1.9.5  Deprecated to avoid confusion with $this->cmdStatus
     *                    and $this->cmdMsg related functions. Use
     *                    $this->setStatus() instead.
     * @param int  $newStatus
     */
    
public function updateCommandStatus$newStatus )
    {
        
$this->setData(self::FLD_STATUS$newStatus);
    }

    
/**
     *
     * @return null|string
     */
    
public function getWpConfigFile()
    {
        if ( 
$this->wpConfigFile === '' ) {
            
$file "{$this->path}/wp-config.php";

            if ( !
file_exists($file) ) {
                
/**
                 *  check parent dir
                 */
                
$parentDir dirname($this->path);
                
$file "{$parentDir}/wp-config.php";

                if ( !
file_exists($file)
                        || 
file_exists("{$parentDir}/wp-settings.php") ) {

                    
/**
                     * If wp-config moved up, in same dir should NOT have
                     * wp-settings
                     */
                    
$file null;
                }
            }

            
$this->wpConfigFile $file;
        }

        return 
$this->wpConfigFile;
    }

    
/**
     * Takes a WordPress site URL and uses it to populate serverName, siteUrl,
     * and docRoot data. If a matching docRoot cannot be found using the
     * serverName, the install will be flagged and an ST_ERR_DOCROOT status set.
     *
     * @param string $url
     *
     * @return boolean
     * @throws LSCMException  Thrown indirectly.
     */
    
public function populateDataFromUrl$url )
    {
        
/** @noinspection HttpUrlsUsage */
        
$parseSafeUrl =
            (
preg_match('#^https?://#'$url)) ? $url "http://$url";

        
$info parse_url($parseSafeUrl);

        
$serverName strtolower($info['host']);
        
$this->setData(self::FLD_SERVERNAME$serverName);

        
$siteUrlTrim $info['host'];

        if ( isset(
$info['path']) ) {
            
$siteUrlTrim .= $info['path'];
        }

        
$this->setData(self::FLD_SITEURL$siteUrlTrim);

        
$docRoot ControlPanel::getClassInstance()->mapDocRoot($serverName);
        
$this->setData(self::FLD_DOCROOT$docRoot);

        if ( 
$docRoot === null ) {
            
$this->setStatus(self::ST_ERR_DOCROOT);
            
$this->addUserFlagFile(false);

            
$msg "{$this->path} - Could not find matching document root for "
                
"WP siteurl/servername {$serverName}.";

            
$this->setCmdStatusAndMsg(UserCommand::EXIT_ERROR$msg);
            
Logger::error($msg);
            return 
false;
        }

        return 
true;
    }

    
/**
     * Deprecated 06/18/19. Renamed to populateDataFromUrl().
     *
     * @deprecated
     * @param string  $siteUrl
     * @return boolean
     * @throws LSCMException  Thrown indirectly.
     */
    
public function setSiteUrl$siteUrl )
    {
        return 
$this->populateDataFromUrl($siteUrl);
    }

    
/**
     * Adds the flag file to an installation.
     *
     * @param boolean  $runningAsUser
     * @return boolean  True when install has a flag file created/already.
     * @throws LSCMException  Thrown indirectly.
     */
    
public function addUserFlagFile$runningAsUser true )
    {
        
$file "{$this->path}/" self::FLAG_FILE;

        if ( !
file_exists($file) ) {
            
$content Context::getFlagFileContent();

            if ( !
file_put_contents($file$content) ) {
                return 
false;
            }
        }

        if ( !
$runningAsUser ) {
            
$ownerInfo $this->getOwnerInfo();

            
chown($file$ownerInfo['user_id']);
            
chgrp($file$ownerInfo['group_id']);
        }

        
$this->setStatusBit(self::ST_FLAGGED);
        return 
true;
    }

    
/**
     *
     * @return boolean
     */
    
public function removeFlagFile()
    {
        
$file "{$this->path}/" self::FLAG_FILE;

        if ( 
file_exists($file) ) {

            if ( !
unlink($file) ) {
                return 
false;
            }
        }

        
$this->unsetStatusBit(self::ST_FLAGGED);
        return 
true;
    }

    
/**
     * Add a flag file to indicate that a new LSCWP plugin was added to this
     * installation.
     *
     * This function should only be called by the installation owner to avoid
     * permission problems involving this file.
     *
     * @return boolean
     */
    
public function addNewLscwpFlagFile()
    {
        
$file "{$this->path}/" self::FLAG_NEW_LSCWP;

        if ( !
file_exists($file) ) {

            if ( !
file_put_contents($file'') ) {
                return 
false;
            }
        }

        return 
true;
    }

    
/**
     * Remove "In Progress" flag file to indicate that a WPInstall action has
     * been completed.
     *
     * @return boolean
     */
    
public function removeNewLscwpFlagFile()
    {
        
$file "{$this->path}/" self::FLAG_NEW_LSCWP;

        if ( 
file_exists($file) ) {

            if ( !
unlink($file) ) {
                return 
false;
            }
        }

        return 
true;
    }

    
/**
     *
     * @param boolean  $forced
     * @return int
     * @throws LSCMException  Thrown indirectly.
     */
    
public function refreshStatus$forced false )
    {
        if ( !
$this->refreshed || $forced ) {
            
UserCommand::issue(UserCommand::CMD_STATUS$this);
            
$this->refreshed true;
        }

        return 
$this->getData(self::FLD_STATUS);
    }

    
/**
     *
     * @param string  $pluginDir
     * @throws LSCMException  Thrown indirectly.
     */
    
public function removePluginFiles$pluginDir )
    {
        if ( 
file_exists(dirname($pluginDir)) && file_exists($pluginDir) ) {
            
exec("rm -rf {$pluginDir}");

            
$msg "{$this->path} - Removed LSCache for WordPress plugin files "
                
'from plugins directory';
            
Logger::debug($msg);
        }
    }

    public function 
isFlagBitSet()
    {
        
$status $this->getStatus();

        if ( 
$status self::ST_FLAGGED ) {
            return 
true;
        }

        return 
false;
    }

    
/**
     *
     * @param null|int  $status
     * @return bool
     */
    
public function hasFatalError$status null )
    {
        if ( 
$status === null ) {
            
$status $this->getData(self::FLD_STATUS);
        }

        
$errMask = (self::ST_ERR_EXECMD
            
self::ST_ERR_EXECMD_DB
            
self::ST_ERR_TIMEOUT
            
self::ST_ERR_SITEURL
            
self::ST_ERR_DOCROOT
            
self::ST_ERR_WPCONFIG
        
);

        return ((
$status $errMask) > 0);
    }

    
/**
     *
     * @return string
     * @throws LSCMException  Thrown indirectly.
     */
    
public function getPhpBinary()
    {
        if ( 
$this->phpBinary == null ) {
            
$this->phpBinary =
                    
ControlPanel::getClassInstance()->getPhpBinary($this);
        }

        return 
$this->phpBinary;
    }

    
/**
     * Returns requested owner info.
     *
     * @param string  $field  Key ('user_id', 'user_name', or 'group_id') in
     *                         the $ownerInfo array.
     * @return mixed[]|int|string|null
     */
    
public function getOwnerInfo$field '' )
    {
        if ( 
$this->ownerInfo == null ) {
            
$this->ownerInfo Util::populateOwnerInfo($this->path);
        }

        if ( 
$field == '' ) {
            return 
$this->ownerInfo;
        }
        elseif ( isset(
$this->ownerInfo[$field]) ) {
            return 
$this->ownerInfo[$field];
        }

        return 
null;
    }

    
/**
     *
     * @return string
     */
    
public function getSuCmd()
    {
        if ( 
$this->suCmd == null ) {
            
$owner $this->getOwnerInfo('user_name');
            
$this->suCmd "su {$owner} -s /bin/bash";
        }

        return 
$this->suCmd;
    }

    
/**
     *
     * @return int
     */
    
public function getCmdStatus()
    {
        return 
$this->cmdStatus;
    }

    
/**
     *
     * @return string
     */
    
public function getCmdMsg()
    {
        return 
$this->cmdMsg;
    }

    public function 
setCmdStatusAndMsg$status$msg )
    {
        
$this->cmdStatus $status;
        
$this->cmdMsg $msg;
    }

}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

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

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.009 ]--