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.
bin ich richtig zu sagen, dass der Abfrage-Datentyp ist TEXT? –
** @ 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. –
10/4 Com, Nach sorgfältiger Lektüre der Antwort kann ich sehen, dass es funktioniert, daher werde ich es akzeptieren –