Create a tempnam substitute that safely creates files with a given extension.

This commit is contained in:
Chad Parry
2011-04-30 17:45:44 -06:00
parent 97400b7815
commit 5c9a3b3f39
4 changed files with 115 additions and 2 deletions
+25
View File
@@ -40,4 +40,29 @@ class system_Core {
}
return null;
}
/**
* Create a file with a unique file name.
* This helper is similar to the built-in tempnam, except that it supports an optional postfix.
*/
static function tempnam($dir = TMPPATH, $prefix = "", $postfix = "") {
return self::_tempnam($dir, $prefix, $postfix, "tempnam");
}
// This helper provides a dependency-injected implementation of tempnam.
static function _tempnam($dir, $prefix, $postfix, $builtin) {
$success = false;
do {
$basename = call_user_func($builtin, $dir, $prefix);
if (!$basename) {
return false;
}
$filename = $basename . $postfix;
$success = !file_exists($filename) && @rename($basename, $filename);
if (!$success) {
@unlink($basename);
}
} while (!$success);
return $filename;
}
}