' . sprintf('

%s is not writable.

', $base) . '

'); } } else if (!self::is_writable($cacheFolder)) { die('
' . sprintf('

%s is not writable.

', $cacheFolder) . '

'); } $checked[$base . '/' . $folder] = true; } } public static function measurePermission($testDir) { while ('.' != $testDir && !is_dir($testDir)) { $testDir = dirname($testDir); } if ($stat = @stat($testDir)) { self::$dirPermission = $stat['mode'] & 0007777; self::$filePermission = self::$dirPermission & 0000666; } } /** * @param $path * * @return mixed */ public static function toLinux($path) { return str_replace(DIRECTORY_SEPARATOR, '/', $path); } /** * @return string */ public static function getBasePath() { $i = N2Filesystem::getInstance(); return $i->_basepath; } public static function getWebCachePath() { return self::getBasePath() . NEXTEND_RELATIVE_CACHE_WEB; } public static function getNotWebCachePath() { return self::getBasePath() . NEXTEND_RELATIVE_CACHE_NOTWEB; } /** * @param $path */ public static function setBasePath($path) { $i = N2Filesystem::getInstance(); $i->_basepath = $path; } /** * @return mixed */ public static function getLibraryPath() { $i = N2Filesystem::getInstance(); return $i->_librarypath; } /** * @param $path */ public static function setLibraryPath($path) { $i = N2Filesystem::getInstance(); $i->_librarypath = $path; } /** * @param $path * * @return mixed */ public static function pathToAbsoluteURL($path) { return N2Uri::pathToUri($path); } /** * @param $path * * @return mixed */ public static function pathToRelativePath($path) { $i = N2Filesystem::getInstance(); return preg_replace('/^' . preg_quote($i->_basepath, '/') . '/', '', str_replace('/', DIRECTORY_SEPARATOR, $path)); } /** * @param $path * * @return string */ public static function pathToAbsolutePath($path) { $i = N2Filesystem::getInstance(); return $i->_basepath . str_replace('/', DIRECTORY_SEPARATOR, $path); } /** * @param $url * * @return mixed */ public static function absoluteURLToPath($url) { $fullUri = N2Uri::getFullUri(); if (substr($url, 0, strlen($fullUri)) == $fullUri) { $i = N2Filesystem::getInstance(); return str_replace($fullUri, $i->_basepath, $url); } return $url; } /** * @param $file * * @return bool */ public static function fileexists($file) { return is_file($file); } /** * @param $file * * @return bool */ public static function safefileexists($file) { return realpath($file) && is_file($file); } /** * @param $dir * * @return array|bool */ public static function folders($dir) { if (!is_dir($dir)) return false; $folders = array(); foreach (scandir($dir) as $file) { if ($file == '.' || $file == '..') continue; if (is_dir($dir . DIRECTORY_SEPARATOR . $file)) $folders[] = $file; } return $folders; } /** * @param $path * * @return bool */ public static function is_writable($path) { return is_writable($path); } /** * @param $path * * @return bool */ public static function createFolder($path) { return mkdir($path, self::$dirPermission, true); } /** * @param $dir * * @return bool */ public static function deleteFolder($dir) { if (!is_dir($dir) || is_link($dir)) return unlink($dir); foreach (scandir($dir) as $file) { if ($file == '.' || $file == '..') continue; if (!self::deleteFolder($dir . DIRECTORY_SEPARATOR . $file)) { chmod($dir . DIRECTORY_SEPARATOR . $file, self::$dirPermission); if (!self::deleteFolder($dir . DIRECTORY_SEPARATOR . $file)) return false; }; } return rmdir($dir); } /** * @param $path * * @return bool */ public static function existsFolder($path) { return is_dir($path); } /** * @param $path * * @return array */ public static function files($path) { $files = array(); if (is_dir($path)) { if ($dh = opendir($path)) { while (($file = readdir($dh)) !== false) { if ($file[0] != ".") { $files[] = $file; } } closedir($dh); } } return $files; } /** * @param $path * * @return bool */ public static function existsFile($path) { return file_exists($path); } /** * @param $path * @param $buffer * * @return int */ public static function createFile($path, $buffer) { return file_put_contents($path, $buffer); } /** * @param $path * * @return string */ public static function readFile($path) { return file_get_contents($path); } /** * convert dir alias to normal format * * @param $pathName * * @return mixed */ public static function dirFormat($pathName) { return str_replace(".", NDS, $pathName); } public static function getImagesFolder() { return ''; } public static function realpath($path) { return rtrim(realpath($path), '/\\'); } private static $translate = array(); public static function registerTranslate($from, $to) { self::$translate[$from] = $to; } public static function translate($path) { $path = self::fixPathSeparator($path); foreach (self::$translate AS $k => $v) { if (strpos($path, $k) === 0) { return str_replace($k, $v, $path); } } return $path; } private static function trailingslashit($string) { return self::untrailingslashit($string) . '/'; } private static function untrailingslashit($string) { return rtrim($string, '/\\'); } public static function fixPathSeparator($path) { return str_replace(N2_DS_INV, DIRECTORY_SEPARATOR, $path); } public static function get_temp_dir() { static $temp = ''; if (defined('SS_TEMP_DIR')) return self::trailingslashit(SS_TEMP_DIR); if ($temp) return self::trailingslashit($temp); if (function_exists('sys_get_temp_dir')) { $temp = sys_get_temp_dir(); if (@is_dir($temp) && self::is_writable($temp)) return self::trailingslashit($temp); } $temp = ini_get('upload_tmp_dir'); if (@is_dir($temp) && self::is_writable($temp)) return self::trailingslashit($temp); $temp = N2Filesystem::getNotWebCachePath() . '/'; if (is_dir($temp) && self::is_writable($temp)) return $temp; return '/tmp/'; } public static function tempnam($filename = '', $dir = '') { if (empty($dir)) { $dir = N2Filesystem::get_temp_dir(); } if (empty($filename) || '.' == $filename || '/' == $filename || '\\' == $filename) { $filename = time(); } // Use the basename of the given file without the extension as the name for the temporary directory $temp_filename = basename($filename); $temp_filename = preg_replace('|\.[^.]*$|', '', $temp_filename); // If the folder is falsey, use its parent directory name instead. if (!$temp_filename) { return self::tempnam(dirname($filename), $dir); } // Suffix some random data to avoid filename conflicts $temp_filename .= '-' . md5(uniqid(rand() . time())); $temp_filename .= '.tmp'; $temp_filename = $dir . $temp_filename; $fp = @fopen($temp_filename, 'x'); if (!$fp && is_writable($dir) && file_exists($temp_filename)) { return self::tempnam($filename, $dir); } if ($fp) { fclose($fp); } return $temp_filename; } } N2Loader::import('libraries.filesystem.filesystem', 'platform');