1

アバターを自分のサイトにアップロードするオプションを作成しようとしています。私が達成しようとしているのはこれです:

first avatar : 1.jpg
second avatar : 2.jpg
third avatar : 3.png 
and so on.. 

PHPでアップロードカウンターを作成するにはどうすればよいですか?私の現在のコードはこれです:

if(!empty($_FILES['cover']['tmp_name']))
{
    $uploadfolder =  "avatar/"; 
    $file1 = rands().'.'.end(explode('.',$_FILES['cover']['name'])); 
    $cover = $uploadfolder.$file1;
    move_uploaded_file($_FILES['cover']['tmp_name'],$cover);
}
else 
{
    $cover = ''
}

この関数rands()は何もしませんので、どのように目標を達成できるかを示すために使用してください。

4

5 に答える 5

1
    /*
     * currentDir - path - eg. c:/xampp/htdocs/movies/uploads (no end slash)
     * $dir - points current working directory.
     * $filename - name of the file.
 */

public static function getFileName($dir, $filename) {

    $filePath = $dir . "/uploads/" . $filename;
    $fileInfo = pathinfo($filePath);
    $i = 1;
    while(file_exists($filePath)) {
        $filePath = $dir . "/uploads/" . $fileInfo['filename'] . "_" . $i . "." . $fileInfo['extension'];
        $i++;

    }
    return $filePath;
}

move_uploaded_file($_FILES['cover']['tmp_name'],$filePath);

アップロードフォルダに同じファイル名が存在する場合。自動生成されます

avatar_1.jpg、avatar_2.jpg、avatar_3.jpg、ansなど..

于 2013-03-09T06:46:49.833 に答える
1

ユーザーをデータベースに保管していて、整数のユーザーIDがある場合は、個別の増分カウンターではなく、このユーザーIDをファイルの命名に使用することをお勧めします。

また、既存のファイルを調べて、次のように既存の最大数を見つけることができます。

function getNextFileName ()
{
    $a = 0;
    $b = 2147483647;

    while ($a < $b)
    {
        $c = floor (($a + $b) / 2);
        if (file_exists ("$c.jpg")) $a = $c + 1;
        else $b = $c;
    }

    return "$a.jpg";
}

function saveAvatar ($avatar)
{
    for ($i = 0; $i < 16; $i++)
    {
        $name = getNextFileName ();
        $fd = fopen ($name, 'x');
        if ($fd !== FALSE)
        {
            fwrite ($fd, $avatar);
            fclose ($fd);
            return $name;
        }
    }
    return FALSE;
}

for ($i = 0; $i < 20; $i++)
    saveAvatar ("BlahBlahBlah$i");
于 2013-03-09T06:42:48.323 に答える
1

乱数の生成に問題があるようです。これを試すことができます。

  $prefix = substr(str_shuffle("0123456789"), 0,3);
  $file1 = $prefix.'.'.end(explode('.',$_FILES['cover']['name']));  

上記の$prefixは次のようになります:任意のランダムな3桁

願っています!

于 2013-03-09T06:43:34.983 に答える
0

XMLファイルを作成し、そこにカウントを保存します

<? xml version="1.0" ?>
<MyRootNode>
  <count>123</count>
</MyRootNode>

アップデート

質問にコードを追加した後に更新が追加されました。

Function Rands(FileExtension as string) as long
  '1 open xml file 
  '2 read counter in
  '3 increment counter
  '4 save value to back xml file
  '5 return incremented counter with the file extension passed attached on the end
  'This is in case a BMP GIF or PNG has been and not JPG
  ' SAMPLE filename 123.GIF
End Function
于 2013-03-09T06:17:43.907 に答える
0

サーバーがファイルロックをサポートしている場合(そしてこれが大きなIFである場合)、次の方法で一意の増分IDがあることを合理的に確認できます。

function get_avatar_id()
{
    $lockfile = fopen("avatar_id_lock_file","a");
    if(flock($lockfile, LOCK_EX)) // Get an exclusive lock to avoid race conditions
    {
        $avatar_id = intval(file_get_contents("avatar_id"); // Assumes you made it and put a number in it
        $avatar_id++;
        file_put_contents("avatar_id", $avatar_id);
        flock($lockfile, LOCK_UN);
        fclose($lockfile);
        return $avatar_id;
    }
    else
    {
        //What do you want to do if you can't lock the file?
    }
}
于 2013-03-09T06:21:31.383 に答える