2017-07-31 18 views
-1

このアップロードスクリプトにuniqid関数を作成するにはどうすればよいですか?uniqid関数を使用してファイル名を変更してエコーする

私の目標は、画像をサーバーにアップロードし、画像をランダムな文字に名前を変更してから、画像がアップロードされたら最後にエコーされるようにすることです。だからここ

は、私はそれを描いてる方法です: アップロードimage.png> スクリプトがimage.pngを処理し、それを3ia8d3awd.pngのようなランダムな名前を与えることをuniqid機能を使用しています> スクリプトは新しいイメージの名前をエコー表示タグに画像をリンクすると、その画像はディレクトリにアップロードされます。ここで

はスクリプトです:

<?php 
$target_dir = "..img/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
// Check if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 
// Check file size 
if ($_FILES["fileToUpload"]["size"] > 500000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != 
"jpeg" 
&& $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], 
$target_file)) { 
     echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has 
been uploaded."; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 

私はこのスクリプトがあるとして、画像の名前を取得し、それらをアップロードすることを意図して知っているが、あなたは私のためにこれを修正するに役立つことができれば。私はこれがuniqid関数だと思うが、私は間違っているかもしれない。私はまだPHPには新しく、これを理解しようとするのに2時間を費やしました。ありがとうございました。

EDIT:more_entropy関数がより一意の名前を提供することが通知されました。

+0

「警告この関数は、戻り値の一意性を保証するものではありません。ほとんどのシステムは、NTPによるシステムクロックを調整するなど、システム時刻が常に変化しているので。したがって、この関数はのためのユニークなIDを返さないことがありますプロセス/スレッド。一意性の可能性を高めるにはmore_entropyを使用してください。 " - http://php.net/manual/en/function.uniqid.php – localheinz

+0

UUIDをうまく使いましょう。 – DanielO

答えて

0

はあなたのコードの先頭でこれを試してみてください。

$newFileName = uniqueid('',TRUE); 
$_FILES["fileToUpload"]["name"] = $newFileName; 

これは、ファイルに新しい一意の名前を割り当てる必要があります。もちろん、私はそれがファイル拡張子を妨害するかどうかを調べるためにそれをテストしなかったが、それがどのように動作するかを教えてくれた。ここで

+0

PHP致命的なエラー:未知のエラー:3行目のディレクトリの未定義関数unique_id()を呼び出してください。上の編集されたビットがあります。私は正しい場所を探しました:<?php $ target_dir = "..img/"; $ newFileName = unique_id( ''、TRUE); $ target_file = $ target_dir。ベースネーム($ _ FILES ["fileToUpload"] ["name"] = $ newFileName); $ uploadOk = 1; – Moses

+0

申し訳ありません、私は 'unique_id()'ではなく 'uniqueid()'を意味しました。答えが編集されました。 – Difster

+0

同じエラー:PHP致命的なエラー:3行目のディレクトリで未定義の関数uniqueid()を呼び出します。uniqid()を試みましたが、ファイルサイズのチェックで別のエラーが発生しました。クラッシュログを作成しません。 – Moses

0

が変更されたスクリプトで、ちょうどそこに名前の4つのセグメントがあり、各セグメントは、6文字の長は、関数固有名で

<?php 

function genName($length = 10) { 
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $charactersLength = strlen($characters); 
    $randomString = ''; 
    for ($i = 0; $i < $length; $i++) { 
     $randomString .= $characters[rand(0, $charactersLength - 1)]; 
    } 
    return $randomString; 
} 

function uniqueName() 
{ 
    $temp = ''; 
    for($i = 0;$i<4;$i++) //number of random segments 
     $temp .= '_'.genName(6); // length of each segment 

    return $temp; 
} 

$_FILES["fileToUpload"]["name"] = uniqueName(); 

$target_dir = "..img/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
// Check if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 
// Check file size 
if ($_FILES["fileToUpload"]["size"] > 500000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != 
"jpeg" 
&& $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], 
$target_file)) { 
     echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has 
been uploaded."; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 
を、これらの設定をカスタマイズすることができているランダムとおそらくユニークな名前を生成するために、ユーザー定義関数を挿入
0

アップロードされたファイルのランダムな名前(うまくいけば唯一の名前)を生成するのに役立つ小さなユーティリティ機能を持つ、変更された未テストバージョンのオリジナル。

<?php 
    if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_FILES)){ 
     /* 
      generate a random name for new files 
     */ 
     function createname($prefix='',$name, $length=16){ 
      /* random chars with optional prefix & length */ 
      return $prefix.substr(sha1($name . uniqid($prefix, true) . time()), 0, $length); 
     } 

     try{ 
      /* Only permit these file extensions */ 
      $allowed=array('jpg','jpeg','png','gif'); 
      /* Do not allow files larger than this */ 
      $maxsize=500000; 
      /* optional prefix to generated file name - can be '' */ 
      $prefix='img_'; 

      $target_dir = "..img/"; 

      /* Get reference to file as object for convenience */ 
      $file=(object)$_FILES['fileToUpload']; 

      $name=$file->name; 
      $size=$file->size; 
      $tmp=$file->tmp_name; 
      $type=$file->type; 
      $error=$file->error; 



      /* File extension */ 
      $ext=pathinfo($name, PATHINFO_EXTENSION); 
      $filename=pathinfo($name, PATHINFO_FILENAME); 

      /* target will be similar to "..img/img_a7119f62b2810c68.jpg" */ 
      $targetfile=createname($prefix, $filename) . '.' . $ext; 
      $targetpath=$target_dir . $targetfile; 

      if($error==UPLOAD_ERR_OK && is_uploaded_file($tmp)){ 

       /* Is the file an image? */ 
       list($w, $h, $t, $a) = getimagesize($tmp); 
       if(!$w or !$h) throw new Exception('File is not an image'); 

       /* Correct file extension? */ 
       if(!in_array($ext, $allowed)) throw new Exception('Incorrect file extension - only '.implode(', ',$allowed).' are permitted'); 


       /* Does file already exist (unlikely if using unique random names) */ 
       if(realpath($targetpath)) throw nex Exception('File already exists'); 

       /* Is file too large? */ 
       if($size > $maxsize)throw new Exception('File is too large'); 

       /* save the file */ 
       $status=move_uploaded_file($tmp, $targetpath); 
       echo $status ? "The file has been saved: <a href='$targetpath' target='_blank'>{$targetfile}</a>" : "Sorry - there was a problem saving the file. Check permissions on folder."; 


      } else { 
       throw new Exception('upload failed'); 
      } 
     }catch(Exception $e){ 
      exit($e->getMessage()); 
     } 
    } 
?> 
関連する問題