web-dev-qa-db-fra.com

La fonction Move_uploaded_file () ne fonctionne pas

Je travaille sur un site Web et je veux que l'utilisateur puisse télécharger des fichiers. Alors j'essaie d'apprendre à faire ça. J'ai fait des recherches et il a été dit que je devais utiliser la fonction move_uploaded_file (). J'ai écrit le code exactement comme sur l'exemple (modification des données), mais cela ne fonctionnerait pas. S'il vous plaît aidez-moi, je suis nouveau à ceux-ci. Voici ce que j'ai fait jusqu'à présent:

<!DOCTYPE html>
<html>
   <head>
   </head>
<body>
   <form action="upload_file.php" method="POST" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
      <input type="file"name="file">
      <input type="submit">
   </form>
</body>
<html>

C'est le fichier upload_file.php:

<!DOCTYPE html>
<html>
  <head>
  <head>
     <body>
        <?php
          $move = "/Users/George/Desktop/uploads/";
          echo $_FILES["file"]['name']."<br>";
          echo $_FILES["file"]['tmp_name']."<br>";
          echo $_FILES["file"]['size']."<br>";
          echo $_FILES['file']['error']."<br>";
          move_uploaded_file($_FILES['file']['name'], $move);
        ?>
     <body>
<html>
31
user2480054

Le fichier sera stocké dans un emplacement temporaire, utilisez nom_mpT au lieu de nom

if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) {
    echo "Uploaded";
} else {
   echo "File was not uploaded";
}
46
Vlad Miller

Essayez d'utiliser copy() fonction au lieu de move_uploaded_file(). Cela travaillé pour moi.

copy($_FILES['file']['tmp_name'], $path);
17
user3502785

Ceci est un exemple de travail.

HTML Form:

<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

Code PHP:

<?php

    $uploaddir = '/var/www/uploads/';
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

    echo "<p>";

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
      echo "File is valid, and was successfully uploaded.\n";
    } else {
       echo "Upload failed";
    }

    echo "</p>";
    echo '<pre>';
    echo 'Here is some more debugging info:';
    print_r($_FILES);
    print "</pre>";

    ?>
16
Shankar Damodaran
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name'];

C'est un.

move_uploaded_file($_FILES['file']['tmp_name'], $move);

Ça fait deux.

Vérifiez si le répertoire uploads est accessible en écriture

Ça fait trois.

valeurs de retour

Retourne TRUE en cas de succès.

Si le nom de fichier n'est pas un fichier de téléchargement valide, aucune action ne sera entreprise et move_uploaded_file () renverra FALSE.

Si le nom de fichier est un fichier de téléchargement valide, mais ne peut pas être déplacé pour une raison quelconque, aucune action ne sera entreprise et move_uploaded_file () renverra FALSE. De plus, un avertissement sera émis.

Regardez la valeur de retour de la fonction.

C'est ça.

8
Hanky Panky

vous devez peut-être accorder plus d'autorisations à vos fichiers.

supposons que votre code soit sous/var/www/my_project

essayez chmod -R 777 /var/www/my_project

4
Joe Cheng

Vous ne faites pas référence au emplacement temporaire où le fichier est enregistré.

Utilisation tmp_name pour accéder au fichier.

Vous pouvez toujours voir ce qui est posté en utilisant:

echo "<pre>"; 
print_r($_FILES);

Si vous voyez ce tableau de fichiers, vous aurez une meilleure compréhension et une meilleure idée de ce qui se passe.

3
shivgre

essaye ça

$ImageName = $_FILES['file']['name'];
$fileElementName = 'file';
$path = 'Users/George/Desktop/uploads/'; 
$location = $path . $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], $location); 
3
chirag ode

ça devrait aimer ça

move_uploaded_file($_FILES['file']['tmp_name'], $move);

Et vous ne pouvez le déplacer nulle part dans votre système .youcan ne le déplacez que dans le répertoire de votre projet, qui doit se trouver dans htdocs ou www, dépend de ce que vous utilisez, wampp, lampp ou vertrgo.

2
Garry

si les fichiers ne bougent pas, cela peut être dû à plusieurs raisons

  • vérifier les autorisations qui téléchargent le répertoire, assurez-vous que son autorisation est au moins 0755.
> find * -type d -print0 | xargs -0 chmod 0755 # for directories find *
> -type f -print0 | xargs -0 chmod 0666 # for files
  • assurez-vous que le propriétaire et le groupe du répertoire de téléchargement ne sont pas root. Dans ce cas, votre script ne pourra rien y écrire. Changez-le donc en admin ou à tout utilisateur non root.
chown -R admin:admin public_html      # will restore permission to admin  for folder and files within it 
chown  admin:admin public_html      # will restore permission to admin  for folder only will skip files
  • vérifiez dans votre répertoire tmp que son écriture est inscriptible ou pas, ouvrez php.ini et vérifiez upload_tmp_dir = votre chemin du répertoire temporaire, assurez-vous qu'il est inscriptible.
  • essayez la fonction copy au lieu de la fonction move_uploaded_file
1
user889030

Cette réponse est en retard, mais cela pourrait aider quelqu'un comme ça m'a aidé

Assurez-vous simplement que vous avez donné l'autorisation à l'utilisateur pour le fichier de destination

Sudo chown -R www-data:www-data /Users/George/Desktop/uploads/

1
Records

Si vous êtes sur une machine Windows, le téléchargement ou l'écriture dans le chemin du dossier spécifié ne posera aucun problème, à l'exception des erreurs de syntaxe.

Mais dans le cas des utilisateurs de Linux, il existe une solution de contournement à ce problème, même si aucune erreur syntaxique n'est visible.

Tout d'abord, je suppose que vous utilisez ceci dans un environnement Linux et que vous devez télécharger quelque chose dans votre dossier de projet dans le répertoire public.

Même si vous avez accès en écriture et en lecture au dossier du projet, PHP n'est pas géré par l'utilisateur final. Il est et peut être géré par un www-data utilisateur ou groupe.

Donc, afin de faire cela www-data obtenir le premier accès, tapez;

Sudo chgrp "www-data" your_project_folder

une fois que c'est fait, s'il n'y a pas d'accès en écriture au suivant également;

Sudo chown g+w your_project_folder

Cela fera l'affaire sous Linux.

S'il vous plaît, pas que cela est fait dans un environnement Linux, avec phpmyadmin, et mysql en cours d'exécution.

1
Kevin RED