Mik*_*ike 7 php random upload image file-rename
如何创建随机文本字符串以用于文件名?
我正在上传照片并在完成后重命名.所有照片都将存储在一个目录中,因此它们的文件名必须是唯一的.
有这样做的标准方法吗?
有没有办法在尝试覆盖之前检查文件名是否已经存在?
这是为了一个单一的用户环境(我自己)在我的网站上显示我的个人照片,但我想自动化一点.我不需要担心两个用户同时尝试上传和生成相同的文件名,但我确实想检查它是否已经存在.
我知道如何上传文件,我知道如何生成随机字符串,但我想知道是否有一种标准的方法.
Geo*_*ton 32
正确的方法是使用PHP的tempnam()功能.它在指定目录中创建一个具有保证唯一名称的文件,因此您不必担心随机性或覆盖现有文件:
$filename = tempnam('/path/to/storage/directory', '');
unlink($filename);
move_uploaded_file($_FILES['file']['tmp_name'], $filename);
Run Code Online (Sandbox Code Playgroud)
Dom*_*aft 28
function random_string($length) {
$key = '';
$keys = array_merge(range(0, 9), range('a', 'z'));
for ($i = 0; $i < $length; $i++) {
$key .= $keys[array_rand($keys)];
}
return $key;
}
echo random_string(50);
Run Code Online (Sandbox Code Playgroud)
示例输出:
zsd16xzv3jsytnp87tk7ygv73k8zmr0ekh6ly7mxaeyeh46oe8
编辑
在目录中使这个唯一,在这里更改为函数:
function random_filename($length, $directory = '', $extension = '')
{
// default to this files directory if empty...
$dir = !empty($directory) && is_dir($directory) ? $directory : dirname(__FILE__);
do {
$key = '';
$keys = array_merge(range(0, 9), range('a', 'z'));
for ($i = 0; $i < $length; $i++) {
$key .= $keys[array_rand($keys)];
}
} while (file_exists($dir . '/' . $key . (!empty($extension) ? '.' . $extension : '')));
return $key . (!empty($extension) ? '.' . $extension : '');
}
// Checks in the directory of where this file is located.
echo random_filename(50);
// Checks in a user-supplied directory...
echo random_filename(50, '/ServerRoot/mysite/myfiles');
// Checks in current directory of php file, with zip extension...
echo random_filename(50, '', 'zip');
Run Code Online (Sandbox Code Playgroud)