如何創建隨文本名稱一起使用的文本字符串?在php中爲文件名生成隨機字符串
我上傳照片並在完成後重命名它們。所有照片將被存儲在一個目錄中,因此它們的文件名必須是唯一的。
有沒有這樣做的標準方式?
有沒有辦法在覆蓋之前檢查文件名是否已經存在?
這是一個單用戶環境(我)在我的網站上顯示我的個人照片,但我想稍微自動化一下。我不需要擔心兩個用戶同時嘗試上傳和生成相同的文件名,但我確實想檢查它是否已經存在。
我知道如何上傳文件,並且我知道如何生成隨機字符串,但是我想知道是否有標準的方法。
如何創建隨文本名稱一起使用的文本字符串?在php中爲文件名生成隨機字符串
我上傳照片並在完成後重命名它們。所有照片將被存儲在一個目錄中,因此它們的文件名必須是唯一的。
有沒有這樣做的標準方式?
有沒有辦法在覆蓋之前檢查文件名是否已經存在?
這是一個單用戶環境(我)在我的網站上顯示我的個人照片,但我想稍微自動化一下。我不需要擔心兩個用戶同時嘗試上傳和生成相同的文件名,但我確實想檢查它是否已經存在。
我知道如何上傳文件,並且我知道如何生成隨機字符串,但是我想知道是否有標準的方法。
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);
輸出示例:
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');
希望這是什麼您正在尋找: -
<?php
function generateFileName()
{
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789_";
$name = "";
for($i=0; $i<12; $i++)
$name.= $chars[rand(0,strlen($chars))];
return $name;
}
//get a random name of the file here
$fileName = generateName();
//what we need to do is scan the directory for existence of the current filename
$files = scandir(dirname(__FILE__).'/images');//assumed images are stored in images directory of the current directory
$temp = $fileName.'.'.$_FILES['assumed']['type'];//add extension to randomly generated image name
for($i = 0; $i<count($files); $i++)
if($temp==$files[$i] && !is_dir($files[$i]))
{
$fileName .= "_1.".$_FILES['assumed']['type'];
break;
}
unset($temp);
unset($files);
//now you can upload an image in the directory with a random unique file name as you required
move_uploaded_file($_FILES['assumed']['tmp_name'],"images/".$fileName);
unset($fileName);
?>
正確的方式做,這是使用PHP的tempnam()
功能。它會在指定的目錄與保證唯一名稱的文件,所以你不必擔心隨機性或覆蓋現有文件:
$filename = tempnam('/path/to/storage/directory', '');
unlink($filename);
move_uploaded_file($_FILES['file']['tmp_name'], $filename);
你嘗試過什麼?請發佈你做了什麼。 – SKJ
看到[這個問題](http://stackoverflow.com/questions/4356289/php-random-string-generator) – TheWolf
隨機!=獨特。 – David