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>
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";
}
Essayez d'utiliser copy()
fonction au lieu de move_uploaded_file()
. Cela travaillé pour moi.
copy($_FILES['file']['tmp_name'], $path);
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>";
?>
$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.
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
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.
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);
ç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.
si les fichiers ne bougent pas, cela peut être dû à plusieurs raisons
> find * -type d -print0 | xargs -0 chmod 0755 # for directories find * > -type f -print0 | xargs -0 chmod 0666 # for files
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
copy
au lieu de la fonction move_uploaded_file
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/
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.