2009-08-05 2 views
1

Diese Frage wurde vor der Erwähnung der lib oder includes gestellt, die eine funktionale Galerie bietet, aber ich möchte eine von Grund auf neu erstellen. Also alle Ideen auf den folgendenWie erstelle ich eine PHP/MySQL-basierte Bildergalerie von Grund auf?

  1. Galerien müssen hochgeladen werden mit dem Formular und Browse (Diese ich kein Problem finden können, müssen sie einfach nur da sein, um die Schritte zu umreißen)
  2. Benötigen Sie ein Miniaturbild erstellt haben wenn eine Datei hochgeladen wird.
  3. Wie sollte es in der Datenbank strukturiert sein, denn im DB gespeichert Beispiel als Bild oder Dateiname

Requirments

  • Nur PHP und Mysql

Irgendwelche Ideen? Bitte lassen Sie mich wissen, ob es so gut gemacht werden kann nicht: D

Dank

Antwort

6

Ich werde Ihre Fragen versuchen zu beantworten:


Frage 1

Dieser Teil ist eigentlich einfach. Um eine Datei-Upload-Formular zu erstellen, Ihre HTML muss so aussehen:

<form enctype='multipart/form-data' action='CodeTool.php' method='POST'> 
    File: <input name='picture' type='file'/> 
    <input type='submit' value='Upload'/> 
</form> 

Ihr Formular muss haben enctype='multipart/form-data' und die method muss sein POST. Um die Upload-Datei zu lesen, können Sie einfach Folgendes verwenden. Ich habe auch einige grundlegende Validierung hinzugefügt, um sicherzustellen, dass die Datei ein Bild ist.

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"; 
    } 
} 

Frage 2

ein Thumbnail-Bild zu erstellen, können Sie GD (oder ImageMagick, aber es ist nicht in der Standardkonfiguration enthalten) als solche ... Lassen Sie uns von der imagecreatefromstring weiter if Aussage:

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 
} 

Frage 3

Hier haben Sie 2 Möglichkeiten. Sie können Ihre Bilder entweder im Dateisystem oder in der Datenbank speichern. So speichern Sie Ihr Bild in dem Dateisystem, können Sie wie folgt vorgehen:

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'); 
} 

Ich persönlich ziehe die Datenbank unter Verwendung der Bilder zu speichern, wie es einfacher ist, die referentielle Integrität zu halten und macht Backup einfacher (Backup der Datenbank und Sie sind fertig).Es ist ein bisschen langsamer, aber der Unterschied ist wirklich nicht so groß:

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) . "');"); 
} 

Die Felder muss BLOB sein.

+0

bin ich richtig zu sagen, dass der Abfrage-Datentyp ist TEXT? –

+1

** @ Shahmir Javiad: ** Nein, es muss "BLOB" sein, wie in meiner Antwort angegeben. 'TEXT' ist standortabhängig und eignet sich hervorragend für große Texte, führt jedoch zu Datenkorruptionsproblemen für binäre Objekte. –

+0

10/4 Com, Nach sorgfältiger Lektüre der Antwort kann ich sehen, dass es funktioniert, daher werde ich es akzeptieren –

0

Sie sind fast auf jeden Fall die Bilder im Dateisystem speichern, gehen zu wollen, und dann verweist nur den Dateinamen \ Pfad in dem DB-Eintrag - Dadurch bleiben die Größe der Abfrageergebnisse niedrig, insbesondere wenn Sie die Informationen für mehrere Bilder abrufen möchten. Es macht es auch viel einfacher, Dinge wie imagemagick aufzurufen, wenn Sie damit Thumbnails erstellen möchten.

+0

Ist ImageMagick Unterstützung PHP? –

+1

http://us.php.net/imagick – Amber