Viewing file: Util.php (11.21 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;
class Util {
/** * * @param string $tag * @return string */ public static function get_request_var( $tag ) { $varValue = null;
if ( isset($_REQUEST[$tag]) ) { return trim($_REQUEST[$tag]); }
/** * Request var not found in $_REQUEST, try checking POST and * QUERY_STRING environment variables. */ if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { $querystring = urldecode(getenv('POST')); } else { $querystring = urldecode(getenv('QUERY_STRING')); }
if ( $querystring != '' && preg_match("/(?:^|\?|&){$tag}=([^&]+)/", $querystring, $m) ) {
$varValue = $m[1]; }
if ( $varValue != null ) { $varValue = trim($varValue); }
return $varValue; }
/** * * @param string $tag * @return array */ public static function get_request_list( $tag ) { $varValue = null;
if ( isset($_REQUEST[$tag]) ) { $varValue = $_REQUEST[$tag]; } else { /** * Request var not found in $_REQUEST, try checking POST and * QUERY_STRING environment variables. */ if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { $querystring = urldecode(getenv('POST')); } else { $querystring = urldecode(getenv('QUERY_STRING')); }
if ( $querystring != '' && preg_match_all("/(?:^|\?|&){$tag}\[\]=([^&]+)/", $querystring, $m) ) {
$varValue = $m[1]; } }
return (is_array($varValue)) ? $varValue : null; }
public static function restartLsws() { Logger::info('Performing a Graceful Restart to apply changes...');
$OS = php_uname('s');
if ( $OS == 'FreeBSD' ) { $lswsCtl = '/usr/local/etc/rc.d/lsws.sh'; } else { $lswsCtl = '/sbin/service lsws'; }
$cmd = "{$lswsCtl} restart"; exec($cmd); }
/** * @since 2.1.15 * * @param int $startTime * @param int $timeout * @return bool */ public static function timedOut( $startTime, $timeout ) { return ((time() - $startTime) > $timeout); }
/** * This function is used to get the file owner by name. Useful in cases * where UID is not accepted or setting a files group to match owner * (It is not safe to assume UID == GID or GID exists for username 'x'). * * @since 2.2.0 * * @param string $filepath * @return array Keys are id, name, group_id */ public static function populateOwnerInfo( $filepath ) { clearstatcache(); $ownerID = fileowner($filepath); $ownerInfo = posix_getpwuid($ownerID); $name = $ownerInfo['name']; $groupID = filegroup($filepath);
$info = array( 'user_id' => $ownerID, 'user_name' => $name, 'group_id' => $groupID );
return $info; }
public static function changeUserGroup( $file, $owner, $group ) { chown($file, $owner); chgrp($file, $group); }
/** * Set file permissions of $file2 to match those of $file1. * * @since 2.2.0 * * @param string $file1 * @param string $file2 */ public static function matchPermissions( $file1, $file2 ) { /** * convert dec to oct */ $perms = (fileperms($file1) & 0777);
chmod($file2, $perms); }
/** * * @param string $url * @param boolean $headerOnly * @return string */ public static function get_url_contents( $url, $headerOnly = false ) { if ( ini_get('allow_url_fopen') ) { /** * silence warning when OpenSSL missing while getting LSCWP ver * file. */ $url_content = @file_get_contents($url);
if ( $url_content !== false ) {
if ( $headerOnly ) { return implode("\n", $http_response_header); }
return $url_content; } }
if ( function_exists('curl_version') ) { $ch = curl_init();
curl_setopt_array( $ch, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => $headerOnly, CURLOPT_NOBODY => $headerOnly, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1 ) );
$url_content = curl_exec($ch); curl_close($ch);
if ( $url_content !== false ) { return $url_content; } }
$cmd = 'curl';
if ( $headerOnly ) { $cmd .= ' -s -I'; }
$url_content = exec("{$cmd} {$url}", $output, $ret);
if ( $ret === 0 ) { $url_content = implode("\n", $output); return $url_content; }
return ''; }
public static function DirectoryMd5( $dir ) { if ( !is_dir($dir) ) { return false; }
$filemd5s = array(); $d = dir($dir);
while ( ($entry = $d->read()) !== false ) {
if ( $entry != '.' && $entry != '..' ) {
$currEntry = "{$dir}/{$entry}";
if ( is_dir($currEntry) ) { $filemd5s[] = self::DirectoryMd5($currEntry); } else { $filemd5s[] = md5_file($currEntry); } } }
$d->close(); return md5(implode('', $filemd5s)); }
/** * @param string $file * @param string $backup * @return boolean * @throws LSCMException Thrown indirectly. */ private static function matchFileSettings( $file, $backup ) { clearstatcache(); $ownerID = fileowner($file); $groupID = filegroup($file);
if ( $ownerID === false || $groupID === false ) { Logger::debug("Could not get owner/group of file {$file}");
unlink($backup);
Logger::debug("Removed file {$backup}"); return false; }
self::changeUserGroup($backup, $ownerID, $groupID); self::matchPermissions($file, $backup);
return true; }
private static function getBackupSuffix( $filepath, $bak = '_lscachebak_orig' ) { $i = 1;
if ( file_exists($filepath . $bak) ) { $bak = sprintf("_lscachebak_%02d", $i);
while ( file_exists($filepath . $bak) ) { $i++; $bak = sprintf("_lscachebak_%02d", $i); } }
return $bak; }
/** * * @param string $filepath * @return boolean * @throws LSCMException Thrown indirectly. */ public static function createBackup( $filepath ) { $bak = self::getBackupSuffix($filepath); $backup = $filepath . $bak;
if ( !copy($filepath, $backup) ) { Logger::debug( "Could not backup file {$filepath} to location {$backup}" );
return false; }
Logger::verbose("Created file{$backup}");
if ( !self::matchFileSettings($filepath, $backup) ) { Logger::debug( "Could not backup file {$filepath} to location {$backup}" );
return false; }
Logger::debug('Matched owner/group setting for both files'); Logger::info( "Successfully backed up file {$filepath} to location {$backup}" );
return true; }
/** * @param string $zipFile * @param string $dest * @return boolean * @throws LSCMException Thrown indirectly. */ public static function unzipFile( $zipFile, $dest ) { if ( class_exists('\ZipArchive') ) { $zipArchive = new \ZipArchive();
if ( $zipArchive->open($zipFile) === true ) { $extracted = $zipArchive->extractTo($dest); $zipArchive->close();
if ( $extracted ) { return true; } }
Logger::debug("Could not unzip {$zipFile} using ZipArchive."); }
$output = array();
exec( "unzip {$zipFile} -d {$dest} > /dev/null 2>&1", $output, $return_var );
if ( $return_var == 0 ) { return true; } else { Logger::debug("Could not unzip {$zipFile} from cli."); }
return false; }
/** * Check if directory is empty. * * @param string $dir * @return boolean */ public static function is_dir_empty( $dir ) { if ( ($handle = @opendir($dir)) == false ) { return true; }
while ( ($entry = readdir($handle)) !== false ) {
if ( $entry != '.' && $entry != '..' ) { return false; } }
return true; }
/** * * @param string $vhCacheRoot */ public static function ensureVHCacheRootInCage( $vhCacheRoot ) { $cageFsFile = '/etc/cagefs/cagefs.mp';
$remount = false;
if ( file_exists($cageFsFile) ) {
$file_contents = file($cageFsFile);
if ( $vhCacheRoot[0] == '/' ) {
$vhCacheRoot = '%' . str_replace('/$vh_user', '', $vhCacheRoot); $escVHCacheRoot = str_replace('!', '\!', $vhCacheRoot);
if ( !preg_grep('!^\s*' . $escVHCacheRoot . '!im', $file_contents) ) { $remount = true; file_put_contents( $cageFsFile, "\n{$vhCacheRoot}", FILE_APPEND ); } }
if ( $remount ) { exec('/usr/sbin/cagefsctl --remount-all'); } } }
/** * Recursively a directory's contents and optionally the directory itself. * * @param string $dir Directory path * @param boolean $keepParent Only remove directory contents when true. * @return boolean */ public static function rrmdir( $dir, $keepParent = false ) { if ( $dir != '' && is_dir($dir) ) {
foreach ( glob("{$dir}/*") as $file ) {
if ( is_dir($file) ) { self::rrmdir($file); } else { unlink($file); } }
if ( !$keepParent ) { rmdir($dir); }
return true; }
return false; }
}
|