public static function makeTempFileInFolder($prefix, $suffix, $folder="")
{
if (strlen($folder)==0) $folder = sys_get_temp_dir();
do {
$file = $folder."/".$prefix.rand(1,99999).time().$suffix;
} while (file_exists($file));
return $file;
}
function tempnamp($dir, $prefix, $postfix) {
$maxAttempts = 1000;
// Trim trailing slashes from $dir.
$dir = rtrim($dir, DIRECTORY_SEPARATOR);
// If we don't have permission to create a directory, fail, otherwise we will
// be stuck in an endless loop.
if (!is_dir($dir) || !is_writable($dir)) return false;
// Make sure characters in prefix and postfix are safe.
if (strpbrk($prefix, '\\/:*?"<>|') !== false) return false;
if (strpbrk($postfix, '\\/:*?"<>|') !== false) return false;
// Attempt to create a random file until it works.
$attempts = 0;
do
{
$path = $dir.DIRECTORY_SEPARATOR.$prefix.mt_rand(100000, mt_getrandmax()).$postfix;
$fp = @fopen($path, 'x+');
} while (!$fp && $attempts++ < $maxAttempts);
if ($fp) fclose($fp);
return $path;
}
9条答案
按热度按时间qkf9rpyu1#
也许是用
move_uploaded_file($tmp_name, "$uploads_dir/$name.myextension");
请参见www.example.comhttp://php.net/manual/en/function.move-uploaded-file.php#example-2209
iqxoj9l92#
重命名可以做到这一点,用pathinfo找到扩展名,然后替换为您想要的扩展名。
ezykj2lf3#
我发现最简单的方法是创建临时文件,然后重命名它。例如:
vxqlmq5t4#
我的方法是使用tempnam
nkoocmlb5#
这可能会稍微模拟一下
mkstemp()
(请参见http://linux.die.net/man/3/mkstemp),从而实现您想要做的事情:因此,您可以:
hrysbysz6#
dz6r00yl7#
我们就说天普南吧()给你一个文件名"filename",你把它移到"filename.ext",在任何时候,tempnam()可以再次给你"文件名",如果你检查"filename.ext",拒绝tempnam给出的文件名(),并再次调用它,你仍然以这样的可能性结束:在一步和另一步之间,将创建一个同名的文件(这在tempnam()文档页的用户注解中有讨论):https://www.php.net/manual/en/function.tempnam.php.)
然而,如果你只保留tempnam()创建的文件(不删除"filename",直到你删除"filename.ext"),并使用那个文件名+扩展名,那么tempnam()就不可能再使用那个文件名了(据我所知)。是的,每个文件都有"filename"和"filename.ext"是很麻烦的。另一方面,它解决了这个问题。
yzuktlbb8#
与
tempnam()
相同,只是增加了一个参数:名字末尾的p代表后缀。
2ledvvac9#
我更喜欢这个解决方案:
注意:我没有把前缀放在
uniqid
中,因为恕我直言,这不是它的职责