처음부터 PHP/MySQL 전원 갤러리를 어떻게 만들려면?
문제
이 질문은 LIB 또는 기능 갤러리를 제공하는 LIB를 언급하기 전에 요청되었지만 처음부터 하나를 만들고 싶습니다. 그래서 다음에 대한 아이디어
- 갤러리는 양식을 사용하여 업로드해야합니다.
- 파일이 업로드 될 때 썸네일 이미지를 작성해야합니다.
- 예를 들어 DB에 이미지 또는 파일 이름으로 저장된 데이터베이스에서 어떻게 구성되어야합니까?
요구 사항
- PHP와 MySQL 만
어떤 아이디어? 도 할 수 없다면 알려주세요 : D
감사
해결책
귀하의 질문에 답하려고합니다.
질문 1
그 부분은 실제로 간단합니다. 파일 업로드 양식을 작성하려면 HTML이 다음과 같아야합니다.
<form enctype='multipart/form-data' action='CodeTool.php' method='POST'>
File: <input name='picture' type='file'/>
<input type='submit' value='Upload'/>
</form>
당신의 양식에는 있어야합니다 enctype='multipart/form-data'
그리고 method
될 필요가있다 POST
. 그런 다음 업로드 파일을 읽으려면 다음을 간단히 사용할 수 있습니다. 또한 파일이 이미지인지 확인하기 위해 몇 가지 기본 유효성 검사를 추가했습니다.
if(isset($_FILES['picture'])) {
echo "File has been uploaded under temp file " . $_FILES['picture']['tmp_name'];
// Let's check if the file is an image:
$fileData = file_get_contents($_FILES['picture']['tmp_name']);
// Using imagecreatefromstring, that way you don't need to
// guess the image format.
if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
echo " and is a valid image";
} else {
echo " and is not a valid image";
}
}
질문 2
썸네일 이미지를 만들려면 GD (또는 imagemagick, 기본 구성에 포함되지 않음)를 사용할 수 있습니다. imagecreatefromstring
if
성명:
if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
// Let's create a 100x100 thumbnail
$width = imagesx($img);
$height = imagesy($img);
$boxSize = min($width,$height);
$boxX = ($width / 2) - ($boxSize / 2);
$boxY = ($height / 2) - ($boxSize / 2);
$thumb = imagecreatetruecolor(100, 100);
imagecopyresampled($thumb, $img, 0, 0, $boxX, $boxY, 100, 100, $boxSize, $boxSize);
//$thumb is now a 100x100 thumbnail
}
질문 3
여기에는 두 가지 옵션이 있습니다. 이미지를 파일 시스템 또는 데이터베이스에 저장할 수 있습니다. 파일 시스템에 이미지를 저장하려면 다음을 수행 할 수 있습니다.
if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
move_uploaded_file($_FILES['picture']['tmp_file'], 'somefile.jpg');
// the code from the previous example
imagejpeg($thumb, 'somefile_thumb.jpg');
}
나는 개인적으로 데이터베이스를 사용하여 참조 무결성을 유지하고 백업을 더 간단하게 만들기 때문에 이미지를 저장하는 것을 선호합니다 (데이터베이스를 백업하면 완료됩니다). 조금 느리지 만 차이는 그다지 크지 않습니다.
if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
// the code from the previous example
$tmp_thumb = tempnam(sys_get_temp_dir(), 'thumb');
imagejpeg($thumb, $tmp_thumb);
$thumbData = file_get_contents($tmp_thumb);
mysql_query("INSERT INTO images (original, thumb) VALUES ('" . mysql_real_escape_string($fileData) . "', '" . mysql_real_escape_string($thumbData) . "');");
}
필드는 있어야합니다 BLOB
.
다른 팁
파일 시스템에 이미지를 저장 한 다음 DB 항목에서 Filename Path를 참조하려고합니다. 특히 여러 이미지에 대한 정보를 가져 오려는 경우 쿼리 결과 크기를 줄입니다. 또한 썸네일을 만드는 데 사용하려면 Imagemagick과 같은 것을 호출하는 것이 훨씬 쉽습니다.