2016-12-02 8 views
0

ファイルを保存する場所はresale_certificatesですが、割り当てられたメールの一部とコードを使用して名前を暗号化しています。 注:暗号化は毎回同じですが、各ユーザーに固有です。同じユーザーの場合は保存ファイルを置き換えます

、彼らは別のimage.pngをアップロードした場合、それはtheirEncrypt.png にファイルを保存しますimage.pngアップロードするとき、それは彼らがimage.jpgをアップロードするとき、今theirEncrypt.jpgとtheirEncryptがあるだろうしかしtheirEncrypt.png を交換します.pngはresale_certificatesディレクトリにあります。

これを処理する最善の方法は何ですか?私はアドバイスを探していて、私がそれを保存している方法やこれを防ぐためにできるトリックを変更することにオープンしています!

ありがとうございました!あなたは以前にアップロードした画像の名前を知っているなら、あなたは、新しいイメージを保存する前に、次の操作を行うことができます

+0

この場合、ファイルの種類に関係なく、既存のイメージを削除して新しいイメージをアップロードする必要があります。 – Perumal

答えて

1

さて、あなたはあなたが好きなフォーマットにそのアップロードされた画像を変換する画像ライブラリを使用することができますつまり、.JPGをアップロードすると、ImagickやGDのような画像ライブラリを使用して.PNGファイルを出力してアップロードすることができます。

しかし、あなたが.JPGか.PNG(またはその問題に関しては.GIF)を気にしない場合は、PHPを使ってディレクトリをスキャンして、すべてのファイルを探すことができます(本当に集中的かもしれません!)。与えられた名前のファイル。例えば

<?php 

foreach(scandir('/path/to/resale_certificates/') as $file){ 
    if($file != '.' && $file != '..'){ 
     // explode so we remove the last extension path (not type safe !) 
     $arguments = explode('.', $file); 
     // store the last part 
     $ext = end($arguments); 
     // pop the extension from the $arguments array so we are left 
     // with whatever was left 
     array_pop($arguments); 
     // concatenate the $arguments into a single string again 
     $filename = implode('.', $arguments); 

     // now we can check the filename again 
     if($filename == $theirEncrypt){ 
      unlink('/path/to/resale_certificates/' . $filename . '.' . $ext); 
     } 
    } 
} 

編集: $ファイル)(SCANDIRによって返さ$ファイルの配列から文字列です。関数。シングルドットとダブルドットは、現在の(。)ディレクトリと親ディレクトリ(..)にナビゲートする方法であり、したがってシンボリックリンクです。別のオプションは、$ファイルが実際にファイルであるかどうかをチェックすることです。比較行をis_file( '/ path/to/resale_certificates /'。$ファイル)に置き換えてファイルやシンボリックリンク(。や..のようなもの)かどうかを調べることができますが、文字列をチェックするのはさらに集中的です比較。あなたのユースケースでは、それは必要ではありません。

関連するノートでは、これはクライアントと証明書の数によって異なりますが、代わりにファイル名をストレージ(つまり、データベースなど)に保存してファイルのリンクを解除することもできますこれにより、各ファイルを繰り返し処理し、ファイルを直接リンク解除することができます。

+0

$ file!= '。' && $ file!= '..' この行は何を確認していますか? – CodingMageSheen

+0

を参照してください。または..? – CodingMageSheen

1

<?php 
$previousImageName = 'theirEncrypt.png'; 
unlink(APP_DIR . "/resale_certificates/" . $previousImageName); 
関連する問題