2017-07-08 4 views
0

私はphpを初めて使い、file_get_contents()から一意の結果を返す助けを求めています。その理由は、各写真に一意の名前を付けたいからです。後で、それらのうちの1つだけを削除することができます。file_get_contentsをユニークな結果を返すようにするには

$file =addslashes(file_get_contents($_FILES['image']['tmp_name'][$key])); 

残念ながら、time()とmicrotime()はこの状況では役に立ちません。

+0

*ユニークな結果*はどういう意味ですか?この関数はfileの内容を返すだけなので、ファイルが変更されていなければ決して一意ではありません。 – Soaku

+1

'理由は、それぞれの写真に一意の名前を付けたいからです。' - 'file_get_contents()'はそれを行なわない。 –

+0

ファイルの内容を教えてくれますが、どうすれば写真を保存できますか?一意の名前を持つテーブルの列型のlongblob? varchar(一意の名前を使用)を使用すると、写真を保存して印刷できませんでした。 – cyberspacelogin

答えて

0

多分これがお手伝いします:http://php.net/manual/en/function.uniqid.php

uniqid();

$ imageName = $ imageName '_'。 uniqid();

+0

これはどのように役立ちますか? –

+0

彼はファイル名uniq id – Bluesky

+0

に追加することができますので、これをあなたの答えに書いてください。あなたの答えをコメントで説明する必要がありますか? –

0

コンテンツのSHA-1を生成し、それをファイル名として使用するだけでは(gitのオブジェクトがリポジトリのloose object databaseに格納されるようなもの)私は通常、BLOBをRDBMSに挿入するのが好きではありません。それは少しclunkyだし、blobフィールドには、あなたが動作することを期待している種類のファイルサイズのための十分なスペースがあることを確認する必要があります。さらに、ファイルシステムは、ファイルを処理するように最適化されています。したがって、Webサーバーが書き込みアクセス権を持つサーバー上に特別なディレクトリーを保持することは理にかなっています。次に、そこにファイルを書き込み、それらのファイルへの参照をデータベースに格納します。ここでは例です:

// Read the contents of the file and create a SHA-1 hash signature. 
$tmpPath = $_FILES['image']['tmp_name']; 
$blob = file_get_contents($tmpPath); 
$name = sha1($blob) . '.img'; // e.g. b99c6e26c3775fca9918ad614b7be7fe4fd7bee3.img 

// Save the file to your server somewhere. 
$dstPath = "/path/to/imgdb/$name"; 
move_uploaded_file($tmpPath,$dstPath); 

// TODO: insert reference (i.e. $name) into database somehow... 

そして、はい、研究がbroken SHA-1を持っていますが、あなたは十分に妄想している場合は、簡単に(それに対するいくつかのセーフガードを書くことができ例えば、同じハッシュを持つ既存のアップロードをチェックし、それは内容が異なり、それを変更するにはちょっと名前を変更/追加するだけです)。バックエンドの画像は内容によって識別されません。一意の名前が必要です。一度それを持っていれば、実際の画像データに対応するディスク上のファイルパスを見つけるためにDBからファイルを探します。

画像ファイルがかなり大きいと予想される場合は、第4パラメータを使用してメモリに読み込む量をfile_get_contents()に制限することができます。

+0

ありがとう!私はこれを私のコードに実装してフィードバックを得ようとします。本当に良いと思われる! – cyberspacelogin

関連する問題