Je vais tenter de répondre à vos questions:
Question 1
Cette partie est en fait simple. Pour créer un formulaire de téléchargement de fichiers, votre HTML doit ressembler à ça:
<form enctype='multipart/form-data' action='CodeTool.php' method='POST'>
File: <input name='picture' type='file'/>
<input type='submit' value='Upload'/>
</form>
Votre formulaire doit avoir enctype='multipart/form-data'
et method
doit être POST
. Ensuite, pour lire le fichier de téléchargement, vous pouvez simplement utiliser ce qui suit. J'ai également ajouté une validation de base pour m'assurer que le fichier est une image.
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";
}
}
Question 2
Pour créer une image miniature, vous pouvez utiliser GD (ou ImageMagick, mais il ne figure pas dans la configuration par défaut) en tant que telle ... Continuons de la imagecreatefromstring
déclaration 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
}
question 3
Ici vous avez 2 options. Vous pouvez stocker vos images dans le système de fichiers ou dans la base de données. Pour enregistrer votre image dans le système de fichiers, vous pouvez effectuer les opérations suivantes:
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');
}
Je préfère personnellement en utilisant la base de données pour stocker les images car il est plus facile de garder l'intégrité référentielle et rend la sauvegarde plus simple (sauvegarde la base de données et vous sont fait).Il est un peu plus lent, mais la différence est vraiment pas terrible:
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) . "');");
}
Les champs doit être BLOB
.
Ai-je raison de dire que l'insertion de type de requête est TEXT? –
** @ Shahmir Javiad: ** Non, il doit être 'BLOB' comme spécifié dans ma réponse. 'TEXT' est sensible à l'emplacement et, bien qu'il soit parfait pour les gros textes, il vous causera des problèmes de corruption de données pour les objets binaires. –
10/4 Com, après avoir lu attentivement la réponse, je peux le voir fonctionner donc je vais l'accepter –