web-dev-qa-db-ja.com

ファイル名のphpでランダムな文字列を生成します

ファイル名で使用するテキストのランダムな文字列を作成するにはどうすればよいですか?

写真をアップロードし、完了時に名前を変更しています。すべての写真は1つのディレクトリに保存されるため、ファイル名は一意である必要があります。

これを行う標準的な方法はありますか?

上書きする前に、ファイル名がすでに存在するかどうかを確認する方法はありますか?

これは、シングルユーザー環境(私自身)が私のWebサイトに個人の写真を表示するためのものですが、少し自動化したいと思います。 2人のユーザーが同じファイル名を同時にアップロードして生成しようとすることを心配する必要はありませんが、すでに存在するかどうかを確認したいと思います。

ファイルをアップロードする方法とランダムな文字列を生成する方法を知っていますが、標準的な方法があるかどうかを知りたいです。

7
Mike
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');
28
Domecraft

これを行う適切な方法は、PHPの tempnam() 関数を使用することです。指定されたディレクトリにguaranteedの一意の名前でファイルが作成されるため、ランダム性や既存のファイルの上書きについて心配する必要はありません。

$filename = tempnam('/path/to/storage/directory', '');
unlink($filename);
move_uploaded_file($_FILES['file']['tmp_name'], $filename);
32
George Brighton

これがあなたが探しているものであることを願っています:-

<?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);
?>
1
nurakantech