-1

私はユーザーがログインしてウェブサイトにいくつかの画像をアップロードできるようにするプロジェクトに取り組んでいます。私はphp5を使用しています。ここで、2人の異なるユーザーが同じ名前の2つの画像を日付ベースにアップロードした場合はどうなるかという質問があります。データベースに到達したらすぐに名前を変更する必要があることはわかっています。現在の時刻の値を使用して名前を変更できると思いますが、実際のコードは知っています。誰かがそれで私を助けることができるなら、私は本当にそれを適切にします

4

3 に答える 3

1

tmpfile() は、一時ディレクトリに一意のファイルハンドルを提供します-または- tempnam() は、一時ディレクトリに一意のファイル名を提供します

いずれかを使用してアップロード用の一意のファイルを作成し、必要に応じて名前を変更できます。

于 2013-03-14T01:48:45.573 に答える
1

このようにデータベースの最後のIDで画像の名前を変更するよりも、画像名をデータベースに送信するのが最善です

  //////connect////////////////
include_once ("connect_to_mysql.php");

$file = $_FILES['image']['tmp_name'];
$albumid = $_POST['album_id'];


 $maxfilesize = 8000000;

if($_FILES['image']['size'] > $maxfilesize ) { 
        echo "<br /><br />Your image was too large. Must be 8Mb or less, please<br /><br />
        <a href=\"Profilepic.php\">click here</a> to try again";
        unlink($_FILES['uploadedfile']['tmp_name']); 
        exit();


} if (!isset($file))
 echo "Please select an Image.";
 else
 {

    // Check file size, if too large exit and tell them why

$image_name = addslashes($_FILES['image']['name']);
$image_size = getimagesize($_FILES['image']['tmp_name']);

$album_id = $_POST['album_id'];

$id = mysql_insert_id();

if ($image_size==FALSE)
echo "That's Not an Image.";
else
 {

if (!$insert = mysql_query("INSERT INTO image
 VALUES('','$userid','$image_name')"))

echo "Problem Uploading Image Try Again Please";
else{
$id = mysql_insert_id();
//////////take the last inserted id and use as image name/////////
$file = "uploads/$userid/".$id."";

move_uploaded_file($_FILES['image']['tmp_name'], $file);
于 2013-03-14T01:58:34.563 に答える
0

競合を起こさずにファイルを作成するためのコンセプトが必要なだけなので、次のオプションを提案したいと思います。

オプション 1: 必要に応じて名前を変更する 現在のユーザー ID を変数に取ります。

$tempName = $userID . "_" . strtotime(date('Y-m-d H:i:s')) . "_" . mt_rand();

オプション 2: 別の場所 ユーザーがアップロードしたファイル名と同じ名前を保持したい場合。次に、ユーザーごとに個別のディレクトリにファイルを保存します。

このようなものを使用できます。

$dirPath = "path to the user's directory";
if(!file_exists($dirPath))
mkdir($dirPath,0777);

アップロードすると、一時的な場所にファイルが生成されるため、重複することはありません。

于 2013-03-14T01:57:39.350 に答える