web-dev-qa-db-fra.com

PHP télécharger une image

Très bien, j'ai investi beaucoup de temps dans ce domaine. Je suis nouveau dans la programmation PHP et j'essaie de saisir les bases, mais je suis un peu perdu depuis hier soir. J'ai pu obtenir un formulaire PHP pour télécharger des données de base comme un nom. adresse et des trucs à mon serveur (MySQL).

Mais aujourd’hui, j’ai dit que nous ferions l’étape suivante, qui serait une image pour le serveur. J'ai regardé 3 vidéos sur YouTube, probablement un code 100 fois juste en recopie et en l'essayant de tant de façons différentes.

http://www.youtube.com/watch?v=CxY3FR9doHI
http://www.youtube.com/watch?v=vFZfJZ_WNC4&feature=relmfu

et je n'ai toujours pas réussi à l'obtenir.

Mais longue histoire: j'ai un fichier config.php qui se connecte au serveur et voici le code que je lance sur la page du formulaire d'envoi:

<html>
  <head>
    <title>Upload an image</title>
  </head>
<body>
  <form action="UploadContent.php" method="POST" enctype="multipart/form-data">
  File:
    <input type="file" name="image"> <input type="submit" value="Upload">
  </form>
<?php

// connect to database
include"config.php";

// file properties
$file = $_FILES['image']['tmp_name'];

if (!isset($file))
  echo "Please select a profile pic";
else
{
  $image = addslashes(file_get_content($_FILES['image']['tmp_name']));
  $image_name = addslashes($FILES['image']['name']);
  $image_size = getimagesize($_FILES['image']['tmp_name']);

  if ($image_size==FALSE)
    echo "That isn't a image.";
  else
  {
    $insert = mysql_query("INSERT INTO content VALUES ('','','','','','','','','','$image_name','$image',)");
  }
}
?>
  </body>
</html>

La raison pour tout le '', '', '', '' sur la ligne d'insertion est parce que j'ai le nom dans le 10ème champ et le blob d'image dans le 11ème et tous ceux qui y ont précédé sont le prénom, le nom de famille et des trucs aléatoires comme ça. Comment puis-je réparer cela? Il renvoie l'erreur:

Erreur fatale: appel de la fonction non définie file_get_content () dans /home/content/34/9587634/html/WEBPAGE/UploadContent.php à la ligne 22

Je ne sais pas quoi faire.

4
user1544586

Le code ignore l'appel de la fonction move_uploaded_file () qui permet de vérifier si le fichier indiqué est valide pour le téléchargement.

Vous voudrez peut-être examiner un exemple simple à l'adresse suivante:

http://www.w3schools.com/php/php_file_upload.asp

8

Vous devez ajouter deux nouveaux fichiers: index.html, copiez et collez le code ci-dessous et imageup.php, qui téléchargera votre image.

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

 imageup.php
 <?php
 $banner=$_FILES['banner']['name']; 
 $expbanner=explode('.',$banner);
 $bannerexptype=$expbanner[1];
 date_default_timezone_set('Australia/Melbourne');
 $date = date('m/d/Yh:i:sa', time());
 $Rand=rand(10000,99999);
 $encname=$date.$Rand;
 $bannername=md5($encname).'.'.$bannerexptype;
 $bannerpath="uploads/banners/".$bannername;
 move_uploaded_file($_FILES["banner"]["tmp_name"],$bannerpath);
 ?>

Le code ci-dessus va télécharger votre image avec un nom crypté

3
Kannan Chakkara

Changez la fonction file_get_content() dans votre code en file_get_contents(). Il vous manque "s" à la fin du nom de la fonction. C'est pourquoi il donne une erreur de fonction non définie.

file_get_contents ()

Supprime la dernière virgule inutile après le $image en ligne

"INSERT INTO content VALUES         ('','','','','','','','','','$image_name','$image',)
2
Mudassir Hasan

Je vous recommanderais d'enregistrer l'image sur le serveur, puis d'enregistrer l'URL dans la base de données MYSQL.

Tout d’abord, vous devez effectuer davantage de validation sur votre image avant que les fichiers non validés puissent entraîner d’énormes risques pour la sécurité.

  1. Vérifiez l'image

    if (empty($_FILES['image']))
      throw new Exception('Image file is missing');
    
  2. Enregistrer l'image dans une variable

    $image = $_FILES['image'];
    
  3. Vérifiez les erreurs de temps de téléchargement

    if ($image['error'] !== 0) {
       if ($image['error'] === 1) 
          throw new Exception('Max upload size exceeded');
    
       throw new Exception('Image uploading error: INI Error');
    }
    
  4. Vérifier si le fichier téléchargé existe sur le serveur

    if (!file_exists($image['tmp_name']))
        throw new Exception('Image file is missing in the server');
    
  5. Validez la taille du fichier (changez-le selon vos besoins)

     $maxFileSize = 2 * 10e6; // = 2 000 000 bytes = 2MB
        if ($image['size'] > $maxFileSize)
            throw new Exception('Max size limit exceeded'); 
    
  6. Validez l'image (vérifiez si le fichier est une image)

     $imageData = getimagesize($image['tmp_name']);
         if (!$imageData) 
         throw new Exception('Invalid image');
    
  7. Validez le type mime de l'image (faites-le en fonction de vos besoins)

     $mimeType = $imageData['mime'];
     $allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
     if (!in_array($mimeType, $allowedMimeTypes)) 
        throw new Exception('Only JPEG, PNG and GIFs are allowed');
    

Cela pourrait vous aider à créer un script de téléchargement d'image sécurisé avec PHP.

Source du code: https://developer.hyvor.com/php/image-upload-ajax-php-mysql

De plus, je vous suggère d’utiliser les instructions préparées MYSQLI pour les requêtes visant à améliorer la sécurité.

Je vous remercie.

1
Supun Kavinda
  <?php 
 $target_dir = "images/";
    echo $target_file = $target_dir . basename($_FILES["image"]["name"]);
    $post_tmp_img = $_FILES["image"]["tmp_name"];
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
    $post_imag = $_FILES["image"]["name"];
        move_uploaded_file($post_tmp_img,"../images/$post_imag");
 ?>
0
saad mohmed