File manager - Edit - /usr/local/prospamfilter/library/functions.php
Back
<?php /* ************************************************************************* * * * ProSpamFilter2 * * Bridge between Webhosting panels & SpamExperts filtering * * * * Copyright (c) 2010 SpamExperts B.V. All Rights Reserved, * * * ************************************************************************* * * * Email: support@spamexperts.com * * Website: htttp://www.spamexperts.com * * * ************************************************************************* * * * This software is furnished under a license and may be used and copied * * only in accordance with the terms of such license and with the * * inclusion of the above copyright notice. No title to and ownership * * of the software is hereby transferred. * * * * You may not reverse engineer, decompile or disassemble this software * * product or software product license. * * * * SpamExperts may terminate this license if you don't comply with any * * of the terms and conditions set forth in our end user * * license agreement (EULA). In such event, licensee agrees to return * * licensor or destroy all copies of software upon termination of the * * license. * * * * Please see the EULA file for the full End User License Agreement. * * * ************************************************************************* */ if( !function_exists( "wl" ) ) { function wl($txt) { echo "{$wl}\n"; } } if( !function_exists( "bcdiv" ) ) //<-- This function *might* exist in PHP already. Or atleas customers' PHP { function bcdiv( $first, $second, $scale = 0 ) { $res = $first / $second; return round( $res, $scale ); } } if( !function_exists( "_sort_by_dots_qty_rev" ) ) { function _sort_by_dots_qty_rev($d1, $d2) { $dots1 = substr_count($d1, '.'); $dots2 = substr_count($d2, '.'); if ($dots1 == $dots2) { return 0; } elseif ($dots1 > $dots2) { return -1; } else { return 1; } } } if( !function_exists( "simpleXMLToArray" ) ) { function simpleXMLToArray($xml,$flattenValues=true,$flattenAttributes = true,$flattenChildren=true,$valueKey='@value',$attributesKey='@attributes', $childrenKey='@children') { $return = array(); if(!($xml instanceof SimpleXMLElement)){return $return;} $name = $xml->getName(); $_value = trim((string)$xml); if(strlen($_value)==0){$_value = null;}; if($_value!==null){ if(!$flattenValues){$return[$valueKey] = $_value;} else{$return = $_value;} } $children = array(); $first = true; foreach($xml->children() as $elementName => $child){ $value = simpleXMLToArray($child, $flattenValues, $flattenAttributes, $flattenChildren, $valueKey, $attributesKey, $childrenKey); if(isset($children[$elementName])){ if($first){ $temp = $children[$elementName]; unset($children[$elementName]); $children[$elementName][] = $temp; $first=false; } $children[$elementName][] = $value; } else{ $children[$elementName] = $value; } } if(count($children)>0){ if(!$flattenChildren){$return[$childrenKey] = $children;} else{$return = array_merge($return,$children);} } $attributes = array(); foreach($xml->attributes() as $name=>$value){ $attributes[$name] = trim($value); } if(count($attributes)>0){ if(!$flattenAttributes){$return[$attributesKey] = $attributes;} else{$return = array_merge($return, $attributes);} } return $return; } } if( !function_exists( "argv2array" ) ) { function argv2array ($argv) { $opts = array(); $argv0 = array_shift($argv); while(count($argv)) { $key = array_shift($argv); $value = array_shift($argv); $opts[$key] = $value; } return $opts; } } // if( !function_exists( "xml2array" ) ) { function xml2array($contents, $get_attributes=1, $priority = 'tag') { if(!$contents) return array(); if(!function_exists('xml_parser_create')) { //print "'xml_parser_create()' function not found!"; return array(); } //Get the XML parser of PHP - PHP must have this module for the parser to work $parser = xml_parser_create(''); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, trim($contents), $xml_values); xml_parser_free($parser); if(!$xml_values) return;//Hmm... //Initializations $xml_array = array(); $parents = array(); $opened_tags = array(); $arr = array(); $current = &$xml_array; //Refference //Go through the tags. $repeated_tag_index = array();//Multiple tags with same name will be turned into an array foreach($xml_values as $data) { unset($attributes,$value);//Remove existing values, or there will be trouble //This command will extract these variables into the foreach scope // tag(string), type(string), level(int), attributes(array). extract($data);//We could use the array by itself, but this cooler. $result = array(); $attributes_data = array(); if(isset($value)) { if($priority == 'tag') $result = $value; else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode } //Set the attributes too. if(isset($attributes) and $get_attributes) { foreach($attributes as $attr => $val) { if($priority == 'tag') $attributes_data[$attr] = $val; else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' } } //See tag status and do the needed. if($type == "open") {//The starting of the tag '<tag>' $parent[$level-1] = &$current; if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag $current[$tag] = $result; if($attributes_data) $current[$tag. '_attr'] = $attributes_data; $repeated_tag_index[$tag.'_'.$level] = 1; $current = &$current[$tag]; } else { //There was another element with the same tag name if(isset($current[$tag][0])) {//If there is a 0th element it is already an array $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; $repeated_tag_index[$tag.'_'.$level]++; } else {//This section will make the value an array if multiple tags with the same name appear together $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array $repeated_tag_index[$tag.'_'.$level] = 2; if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); } } $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1; $current = &$current[$tag][$last_item_index]; } } elseif($type == "complete") { //Tags that ends in 1 line '<tag />' //See if the key is already taken. if(!isset($current[$tag])) { //New Key $current[$tag] = $result; $repeated_tag_index[$tag.'_'.$level] = 1; if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data; } else { //If taken, put all things inside a list(array) if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array... // ...push the new element into that array. $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; if($priority == 'tag' and $get_attributes and $attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } $repeated_tag_index[$tag.'_'.$level]++; } else { //If it is not an array... $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value $repeated_tag_index[$tag.'_'.$level] = 1; if($priority == 'tag' and $get_attributes) { if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); } if($attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } } $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken } } } elseif($type == 'close') { //End of tag '</tag>' $current = &$parent[$level-1]; } } return($xml_array); } } if( !function_exists( "smartCopy" ) ) { function smartCopy($source, $dest, $options=array('folderPermission'=>0755,'filePermission'=>0644)) { $result=false; if (is_file($source)) { if ($dest[strlen($dest)-1]== DS ) { if (!file_exists($dest)) { // PHP5 mkdir function supports recursive, so just use that mkdir($dest,$options['folderPermission'],true); } $__dest=$dest.DS.basename($source); } else { $__dest=$dest; } $result=copy($source, $__dest); chmod($__dest,$options['filePermission']); } elseif(is_dir($source)) { if ($dest[strlen($dest)-1]== DS ) { if ($source[strlen($source)-1]== DS ) { //Copy only contents } else { //Change parent itself and its contents $dest=$dest.basename($source); @mkdir($dest,$options['folderPermission']); } } else { if ($source[strlen($source)-1]== DS ) { //Copy parent directory with new name and all its content @mkdir($dest,$options['folderPermission']); } else { //Copy parent directory with new name and all its content @mkdir($dest,$options['folderPermission']); } } $dirHandle=opendir($source); while($file=readdir($dirHandle)) { if($file!="." && $file!=".." && (!strstr($file, ".svn")) ) { $result=smartCopy($source.DS.$file, $dest.DS.$file, $options); } } closedir($dirHandle); } else { $result=false; } return $result; } } if (! function_exists('isWindows')) { function isWindows() { return stripos(PHP_OS, 'win') === 0; } } if( !function_exists( "rrmdir" ) ) { function rrmdir($dir) { if (isWindows()) { system("rmdir $dir /s /q"); } else { system("rm -rf $dir"); } } } if( !function_exists( "is_cli" ) ) { function is_cli() { if ( !isset($_SERVER['HTTP_USER_AGENT']) ) { return true; } else { return false; } } } if( !function_exists( "file_perms" ) ) { function file_perms($file, $octal = false) { if(!file_exists($file)) return false; try { $perms = fileperms($file); } catch (Exception $e) { // It failed. Horribly! return false; } $cut = $octal ? 2 : 3; return substr(decoct($perms), $cut); } } if( !function_exists( "clean_domain" ) ) { function clean_domain( $domain ) { // Lowercase it & trim it. $domain = strtolower( trim( $domain ) ); // Explode it by the separator $x = explode('.', $domain); if(is_array($x)) { // If the first part of the URL is "www".. if ($x[0] == "www") { // chop it off. unset( $x[0] ); // Re-form the domain and give it back! return implode( '.', $x ); } } // Return the domain (lowercased & trimmed) since it apparently did not contain "www." to begin with. return $domain; } } if( !function_exists( "array_sort" ) ) { function array_sort($array, $on, $order=SORT_ASC) { $new_array = array(); $sortable_array = array(); if (count($array) > 0 && is_array($array)) { foreach ($array as $k => $v) { if (is_array($v)) { foreach ($v as $k2 => $v2) { if ($k2 == $on) { $sortable_array[$k] = $v2; } } } else { $sortable_array[$k] = $v; } } switch ($order) { case SORT_ASC: asort($sortable_array); break; case SORT_DESC: arsort($sortable_array); break; } foreach ($sortable_array as $k => $v) { $new_array[$k] = $array[$k]; } } return $new_array; } } // Workaround for [ZF-9088] and missing parse_ini_string for PHP < 5.3.0 if( !function_exists('parse_ini_string') ) { function parse_ini_string( $string ) { $array = Array(); $lines = explode("\n", $string ); foreach( $lines as $line ) { $statement = preg_match( "/^(?!;)(?P<key>[\w+\.\-]+?)\s*=\s*(?P<value>.+?)\s*$/", $line, $match ); if( $statement ) { $key = $match[ 'key' ]; $value = $match[ 'value' ]; # Remove quote if( preg_match( "/^\".*\"$/", $value ) || preg_match( "/^'.*'$/", $value ) ) { $value = mb_substr( $value, 1, mb_strlen( $value ) - 2 ); } $array[ $key ] = $value; } } return $array; } } // is_countable polyfill for PHP < 7.3.0 if (!function_exists('is_countable')) { function is_countable($var) { return (is_array($var) || $var instanceof Countable); } }
| ver. 1.4 |
Github
|
.
| PHP 8.2.30 | Generation time: 0 |
proxy
|
phpinfo
|
Settings