all-in-one-event-calendar/lib/compatibility/memory.php
2017-11-09 17:36:04 +01:00

69 lines
1.7 KiB
PHP

<?php
/**
* Memory related methods.
*
* @author Time.ly Network Inc.
* @since 2.1
*
* @package AI1EC
* @subpackage AI1EC.Lib
*/
class Ai1ec_Compatibility_Memory extends Ai1ec_Base {
/**
* Checks if there is enough available free memory.
*
* @param string $required_limit String memory value i.e '24M'
*
* @return bool True or false.
*/
public function check_available_memory( $required_limit = 0 ) {
if ( 0 === $required_limit ) {
return true;
}
$required = $this->_string_to_bytes( $required_limit );
$limit = $this->_string_to_bytes( ini_get( 'memory_limit' ) );
$used = $this->get_usage();
return ( $limit - $used ) >= $required;
}
/**
* Returns current memory usage if available - otherwise 0.
*
* @return int Memory usage.
*/
public function get_usage() {
if ( is_callable( 'memory_get_usage' ) ) {
return memory_get_usage();
}
return 0;
}
/**
* Converts string value to int.
*
* @param string $v String value.
*
* @return int Number.
*/
protected function _string_to_bytes( $v ) {
$letter = substr( $v, -1 );
$value = (int)substr( $v, 0, -1 );
$powers = array(
'K' => 10,
'M' => 20,
'G' => 30,
'T' => 40,
'P' => 50,
);
$multiplier = 1;
if ( isset( $powers[$letter] ) ) {
$multiplier = pow( 2, $powers[$letter] );
}
if ( 1 === $multiplier ) {
return (int)$v;
}
return $value * $multiplier;
}
}