= 5);
define('W3TC_WIN', (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'));
define('W3TC_EMAIL', 'w3tc@w3-edge.com');
define('W3TC_FEED_URL', 'http://feeds.feedburner.com/W3TOTALCACHE');
define('W3TC_FEED_ITEMS', 3);
define('W3TC_README_URL', 'http://plugins.trac.wordpress.org/browser/w3-total-cache/trunk/readme.txt?format=txt');
define('W3TC_TWITTER_STATUS', 'I just optimized my #wordpress blog\'s #performance using the W3 Total Cache #plugin by @w3edge. Check it out! http://j.mp/A69xX');
define('W3TC_SUPPORT_US_TIMEOUT', 2592000);
/**
* W3 activate error
*
* @param string $error
* @return void
*/
function w3_activate_error($error)
{
$active_plugins = (array) get_option('active_plugins');
$key = array_search(W3TC_FILE, $active_plugins);
if ($key !== false) {
do_action('deactivate_plugin', W3TC_FILE);
array_splice($active_plugins, $key, 1);
do_action('deactivate_' . W3TC_FILE);
do_action('deactivated_plugin', W3TC_FILE);
update_option('active_plugins', $active_plugins);
} else {
do_action('deactivate_' . W3TC_FILE);
}
include W3TC_DIR . '/inc/error.phtml';
exit();
}
/**
* W3 writable error
*
* @param string $path
* @return string
*/
function w3_writable_error($path)
{
$activate_url = wp_nonce_url('plugins.php?action=activate&plugin=' . W3TC_FILE, 'activate-plugin_' . W3TC_FILE);
$reactivate_button = sprintf('', addslashes($activate_url));
if (w3_check_open_basedir($path)) {
if (file_exists($path)) {
$error = sprintf('%s is not write-able, please run following command:
chmod 777 %s
then %s.', $path, $path, $reactivate_button);
} else {
$error = sprintf('%s could not be created, please run following command:
chmod 777 %s
then %s.', $path, dirname($path), $reactivate_button);
}
} else {
$error = sprintf('%s could not be created, open_basedir restriction in effect, please check your php.ini settings:
open_basedir = "%s"then %s.', $path, ini_get('open_basedir'), $reactivate_button);
}
w3_activate_error($error);
}
/**
* Returns current microtime
*
* @return float
*/
function w3_microtime()
{
list ($usec, $sec) = explode(" ", microtime());
return ((float) $usec + (float) $sec);
}
/**
* Check if URL is valid
*
* @param string $url
* @return boolean
*/
function w3_is_url($url)
{
return preg_match('~^https?://~', $url);
}
/**
* Decodes gzip-encoded string
*
* @param string $data
* @return string
*/
function w3_gzdecode($data)
{
$flags = ord(substr($data, 3, 1));
$headerlen = 10;
$extralen = 0;
if ($flags & 4) {
$extralen = unpack('v', substr($data, 10, 2));
$extralen = $extralen[1];
$headerlen += 2 + $extralen;
}
if ($flags & 8) {
$headerlen = strpos($data, chr(0), $headerlen) + 1;
}
if ($flags & 16) {
$headerlen = strpos($data, chr(0), $headerlen) + 1;
}
if ($flags & 2) {
$headerlen += 2;
}
$unpacked = gzinflate(substr($data, $headerlen));
if ($unpacked === FALSE) {
$unpacked = $data;
}
return $unpacked;
}
/**
* Recursive creates directory
*
* @param string $path
* @param integer $mask
* @param string
* @return boolean
*/
function w3_mkdir($path, $mask = 0755, $curr_path = '')
{
$path = preg_replace('~[\\\/]+~', '/', $path);
$path = trim($path, '/');
$dirs = explode('/', $path);
foreach ($dirs as $dir) {
if (empty($dir)) {
return false;
}
$curr_path .= ($curr_path == '' ? '' : '/') . $dir;
if (! is_dir($curr_path)) {
if (@mkdir($curr_path, $mask)) {
@chmod($curr_path, $mask);
} else {
return false;
}
}
}
return true;
}
/**
* Recursive remove dir
*
* @param string $path
* @param array $exclude
* @return void
*/
function w3_rmdir($path, $exclude = array(), $remove = true)
{
$dir = @opendir($path);
if ($dir) {
while (($entry = @readdir($dir))) {
$full_path = $path . '/' . $entry;
if ($entry != '.' && $entry != '..' && ! in_array($full_path, $exclude)) {
if (is_dir($full_path)) {
w3_rmdir($full_path, $exclude);
} else {
@unlink($full_path);
}
}
}
@closedir($dir);
if ($remove) {
@rmdir($path);
}
}
}
/**
* Recursive empty dir
*
* @param string $path
* @param array $exclude
* @return void
*/
function w3_emptydir($path, $exclude = array())
{
w3_rmdir($path, $exclude, false);
}
/**
* Check if content is HTML or XML
*
* @param string $content
* @return boolean
*/
function w3_is_xml($content)
{
return (stristr($content, ' $value) {
$count--;
$query .= urlencode($param) . (! empty($value) ? '=' . urlencode($value) : '') . ($count ? '&' : '');
}
$url .= (strpos($url, '?') === false ? '?' : '&') . $query;
}
if ($fragment != '') {
$url .= $fragment;
}
@header('Location: ' . $url);
exit();
}
/**
* Returns caching engine name
*
* @param $engine
* @return string
*/
function w3_get_engine_name($engine)
{
switch ($engine) {
case 'memcached':
$engine_name = 'memcached';
break;
case 'apc':
$engine_name = 'apc';
break;
case 'file':
$engine_name = 'disk';
break;
case 'file_pgcache':
$engine_name = 'disk (enhanced)';
break;
default:
$engine_name = 'N/A';
break;
}
return $engine_name;
}
/**
* Converts value to boolean
*
* @param mixed $value
* @return boolean
*/
function w3_to_boolean($value)
{
if (is_string($value)) {
switch (strtolower($value)) {
case '+':
case '1':
case 'y':
case 'on':
case 'yes':
case 'true':
case 'enabled':
return true;
case '-':
case '0':
case 'n':
case 'no':
case 'off':
case 'false':
case 'disabled':
return false;
}
}
return (boolean) $value;
}
/**
* Request URL
*
* @param string $method
* @param string $url
* @param string $data
* @param string $auth
* @return string
*/
function w3_url_request($method, $url, $data = '', $auth = '')
{
$method = strtoupper($method);
if (function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, W3TC_POWERED_BY);
if ($method == 'POST') {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
if (! empty($auth)) {
curl_setopt($ch, CURLOPT_USERPWD, $auth);
}
$contents = curl_exec($ch);
curl_close($ch);
return $contents;
} else {
$parse_url = @parse_url($url);
if ($parse_url && isset($parse_url['host'])) {
$host = $parse_url['host'];
$port = (isset($parse_url['port']) ? (int) $parse_url['port'] : 80);
$path = (! empty($parse_url['path']) ? $parse_url['path'] : '/');
$query = (isset($parse_url['query']) ? $parse_url['query'] : '');
$request_uri = $path . ($query != '' ? '?' . $query : '');
$headers = array(
sprintf('%s %s HTTP/1.1', $method, $request_uri),
sprintf('Host: %s', $host),
sprintf('User-Agent: %s', W3TC_POWERED_BY),
'Connection: close'
);
if (! empty($data)) {
$headers[] = sprintf('Content-Length: %d', strlen($data));
}
if (! empty($auth)) {
$headers[] = sprintf('Authorization: Basic %s', base64_encode($auth));
}
$request = implode("\r\n", $headers) . "\r\n\r\n" . $data;
if (($fp = @fsockopen($host, $port))) {
$response = '';
@fputs($fp, $request);
while (! @feof($fp)) {
$response .= @fgets($fp, 4096);
}
@fclose($fp);
list (, $contents) = explode("\r\n\r\n", $response, 2);
return $contents;
}
}
}
}
/**
* Download url via GET
*
* @param $url
* @return string
*/
function w3_url_get($url)
{
return w3_url_request('GET', $url);
}
/**
* Send POST request to URL
*
* @param string $url
* @param string $data
* @param string $auth
* @return string
*/
function w3_url_post($url, $data = '', $auth = '')
{
return w3_url_request('POST', $url, $data, $auth);
}
/**
* Loads plugins
*
* @return void
*/
function w3_load_plugins()
{
$dir = @opendir(W3TC_PLUGINS_DIR);
if ($dir) {
while (($entry = @readdir($dir))) {
if (strrchr($entry, '.') === '.php') {
require_once W3TC_PLUGINS_DIR . '/' . $entry;
}
}
@closedir($dir);
}
}
/**
* Returns true if current connection is secure
*
* @return boolean
*/
function w3_is_https()
{
switch (true) {
case (isset($_SERVER['HTTPS']) && w3_to_boolean($_SERVER['HTTPS'])):
case (isset($_SERVER['SERVER_PORT']) && (int) $_SERVER['SERVER_PORT'] == 443):
return true;
}
return false;
}
/**
* Returns realpath of given path
*
* @param string $path
*/
function w3_realpath($path)
{
$path = preg_replace('~[/\\\]+~', '/', $path);
$parts = explode('/', $path);
$absolutes = array();
foreach ($parts as $part) {
if ('.' == $part) {
continue;
}
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode('/', $absolutes);
}
/**
* Returns open basedirs
*
* @return array
*/
function w3_get_open_basedirs()
{
$open_basedir_ini = ini_get('open_basedir');
$open_basedirs = (W3TC_WIN ? preg_split('~[;,]~', $open_basedir_ini) : explode(':', $open_basedir_ini));
$result = array();
foreach ($open_basedirs as $open_basedir) {
$open_basedir = trim($open_basedir);
if ($open_basedir != '') {
$result[] = w3_realpath($open_basedir);
}
}
return $result;
}
/**
* Checks if path is restricted by open_basedir
*
* @param string $path
* @return boolean
*/
function w3_check_open_basedir($path)
{
$path = w3_realpath($path);
$open_basedirs = w3_get_open_basedirs();
if (! count($open_basedirs)) {
return true;
}
foreach ($open_basedirs as $open_basedir) {
if (strstr($path, $open_basedir) !== false) {
return true;
}
}
return false;
}
/**
* Returns PHP info
*
* @return array
*/
function w3_phpinfo()
{
ob_start();
phpinfo();
$phpinfo = ob_get_clean();
$phpinfo = preg_replace(array(
'#^.*