5

壁紙用のサイトを作成しようとしているので、ファイルがかなり大きくなります (2 MB ~ 5 MB) ため、データベースではなくディスク領域に画像を保存し、データベースへのパスのみを保存する必要があります。そのため、他の提案がない限り、それを行う方法についていくつかのアイデアを提供できる場合 (現在私たちが知っている方法は、アップロード機能を備えた PHP スクリプトを作成し、アップロードする PC から画像を手動で選択することです)。チュートリアルは大歓迎です。どうもありがとう!

これは、管理者がユーザー向けではなく画像を追加するためのものです。注: 私たちはスクリプトを開発していないので、これで何を使用できるかについて皆さんからいくつかのアイデアを得るためのものです。誰も推測しない場合は、php スクリプトを使用します。

4

2 に答える 2

6

アップロードされたファイルごとに UUID を生成し、それをディスク上のファイル名に使用します。これにより、衝突、ファイル名のサニタイズ、およびパス トラバーサルの脆弱性が回避されます。

次のようなテーブルができます: のよう(id, description, filename)な値を持ちます(1, "Green field", "0D729DCD-5116-4480-81CE-90A0380B557A.png")

次に、1 つのフォルダーにあまりにも多くのファイルが存在するという問題を回避したいと考えています。多くの FS でファイル システムの制限に達することになります。

この問題を回避するには、ファイル名の最初の数文字に基づいてディレクトリを作成します。の場合0D729DCD-5116-4480-81CE-90A0380B557A.pngは、 に保存し/0/D/7/0D729DCD-5116-4480-81CE-90A0380B557A.pngます。

于 2013-09-30T18:56:52.133 に答える
6

あなたのフォーム、

<form action="PHP_FILE_PATH.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" name="submit" value="Upload" />
</form>

PHP の部分

<?php
if($_FILES['image']['name'])
{
  $save_path="FOLDER_PATH_TO_SAVE_UPLOADED_IMAGE"; // Folder where you wanna move the file.
  $myname = strtolower($_FILES['image']['tmp_name']); //You are renaming the file here
  move_uploaded_file($_FILES['image']['tmp_name'], $save_path.$myname); // Move the uploaded file to the desired folder
}

$inser_into_db="INSERT INTO `database`.`table` (`folder_name`, `file_name`) VALUES('$save_path', '$myname'))";

?>
于 2013-09-30T19:03:54.890 に答える