From 0b9629778393436a7858ccf8211ef44c1e446f61 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 22 Oct 2014 17:36:52 +0200 Subject: [PATCH] Use the TempManager to handle temporary files --- cron.php | 3 +- lib/base.php | 3 +- lib/private/helper.php | 121 ++--------------------------------------- 3 files changed, 7 insertions(+), 120 deletions(-) diff --git a/cron.php b/cron.php index 8344e55168..bcbb298de5 100644 --- a/cron.php +++ b/cron.php @@ -71,8 +71,7 @@ try { // Handle unexpected errors register_shutdown_function('handleUnexpectedShutdown'); - // Delete temp folder - OC_Helper::cleanTmpNoClean(); + \OC::$server->getTempManager()->cleanOld(); // Exit if background jobs are disabled! $appmode = OC_BackgroundJob::getExecutionType(); diff --git a/lib/base.php b/lib/base.php index 23f0e59451..4af5b51500 100644 --- a/lib/base.php +++ b/lib/base.php @@ -577,7 +577,8 @@ class OC { self::registerLocalAddressBook(); //make sure temporary files are cleaned up - register_shutdown_function(array('OC_Helper', 'cleanTmp')); + $tmpManager = \OC::$server->getTempManager(); + register_shutdown_function(array($tmpManager, 'clean')); if (OC_Config::getValue('installed', false) && !self::checkUpgrade(false)) { if (\OC::$server->getAppConfig()->getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') { diff --git a/lib/private/helper.php b/lib/private/helper.php index 628af14fa0..5b1d31bfc5 100644 --- a/lib/private/helper.php +++ b/lib/private/helper.php @@ -25,7 +25,6 @@ * Collection of useful functions */ class OC_Helper { - private static $tmpFiles = array(); private static $mimetypeIcons = array(); private static $mimetypeDetector; private static $templateManager; @@ -593,136 +592,24 @@ class OC_Helper { * * @param string $postfix * @return string + * @deprecated Use the TempManager instead * * temporary files are automatically cleaned up after the script is finished */ public static function tmpFile($postfix = '') { - $file = get_temp_dir() . '/' . md5(time() . rand()) . $postfix; - $fh = fopen($file, 'w'); - if ($fh!==false){ - fclose($fh); - self::$tmpFiles[] = $file; - } else { - OC_Log::write( - 'OC_Helper', - sprintf( - 'Can not create a temporary file in directory %s. Check it exists and has correct permissions', - get_temp_dir() - ), - OC_Log::WARN - ); - $file = false; - } - return $file; - } - - /** - * move a file to oc-noclean temp dir - * - * @param string $filename - * @return mixed - * - */ - public static function moveToNoClean($filename = '') { - if ($filename == '') { - return false; - } - $tmpDirNoClean = get_temp_dir() . '/oc-noclean/'; - if (!file_exists($tmpDirNoClean) || !is_dir($tmpDirNoClean)) { - if (file_exists($tmpDirNoClean)) { - unlink($tmpDirNoClean); - } - mkdir($tmpDirNoClean); - } - $newname = $tmpDirNoClean . basename($filename); - if (rename($filename, $newname)) { - return $newname; - } else { - return false; - } + return \OC::$server->getTempManager()->getTemporaryFile($postfix); } /** * create a temporary folder with an unique filename * * @return string + * @deprecated Use the TempManager instead * * temporary files are automatically cleaned up after the script is finished */ public static function tmpFolder() { - $path = get_temp_dir() . DIRECTORY_SEPARATOR . md5(time() . rand()); - mkdir($path); - self::$tmpFiles[] = $path; - return $path . DIRECTORY_SEPARATOR; - } - - /** - * remove all files created by self::tmpFile - */ - public static function cleanTmp() { - $leftoversFile = get_temp_dir() . '/oc-not-deleted'; - if (file_exists($leftoversFile)) { - $leftovers = file($leftoversFile); - foreach ($leftovers as $file) { - try { - self::rmdirr($file); - } catch (UnexpectedValueException $ex) { - // not really much we can do here anymore - if (!is_null(\OC::$server)) { - $message = $ex->getMessage(); - \OC::$server->getLogger()->error("Error deleting file/folder: $file - Reason: $message", - array('app' => 'core')); - } - } - } - unlink($leftoversFile); - } - - foreach (self::$tmpFiles as $file) { - if (file_exists($file)) { - try { - if (!self::rmdirr($file)) { - file_put_contents($leftoversFile, $file . "\n", FILE_APPEND); - } - } catch (UnexpectedValueException $ex) { - // not really much we can do here anymore - if (!is_null(\OC::$server)) { - $message = $ex->getMessage(); - \OC::$server->getLogger()->error("Error deleting file/folder: $file - Reason: $message", - array('app' => 'core')); - } - } - } - } - } - - /** - * remove all files in PHP /oc-noclean temp dir - */ - public static function cleanTmpNoClean() { - $tmpDirNoCleanName=get_temp_dir() . '/oc-noclean/'; - if(file_exists($tmpDirNoCleanName) && is_dir($tmpDirNoCleanName)) { - $files=scandir($tmpDirNoCleanName); - foreach($files as $file) { - $fileName = $tmpDirNoCleanName . $file; - if (!\OC\Files\Filesystem::isIgnoredDir($file) && filemtime($fileName) + 600 < time()) { - unlink($fileName); - } - } - // if oc-noclean is empty delete it - $isTmpDirNoCleanEmpty = true; - $tmpDirNoClean = opendir($tmpDirNoCleanName); - if(is_resource($tmpDirNoClean)) { - while (false !== ($file = readdir($tmpDirNoClean))) { - if (!\OC\Files\Filesystem::isIgnoredDir($file)) { - $isTmpDirNoCleanEmpty = false; - } - } - } - if ($isTmpDirNoCleanEmpty) { - rmdir($tmpDirNoCleanName); - } - } + return \OC::$server->getTempManager()->getTemporaryFolder(); } /**