Erreur PHP - Téléchargement d'un fichier
Question
J'essaie d'écrire du PHP pour télécharger un fichier dans un dossier sur mon serveur Web.Voici ce que j'ai :
<?php
if ( !empty($_FILES['file']['tmp_name']) ) {
move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
header('Location: http://www.mywebsite.com/dump/');
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Dump Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<form action="upload.php" enctype="multipart/form-data" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />
Select the File:<br /><input type="file" name="file" /><br />
<input type="submit" value="Upload" />
</form>
</body>
</html>
J'obtiens ces erreurs :
Avertissement:move_uploaded_file(./test.txt) [function.move-uploaded-file] :échec de l'ouverture du flux :Autorisation refusée dans E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php à la ligne 3
Avertissement:move_uploaded_file() [function.move-uploaded-file] :Impossible de déplacer 'C:\WINDOWS emp\phpA30E.tmp' vers './test.txt' dans E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php à la ligne 3
Avertissement:Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3) dans E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ upload.php en ligne 4
PHP version 4.4.7 Exécuter IIS sur une machine Windows.Ce fichier/dossier particulier dispose de 777 autorisations.
Des idées?
La solution
Comme c'est Windows, il n'y a pas de vrai 777.Si vous utilisez chmod, vérifiez les commentaires relatifs à Windows.
Vérifiez que le compte IIS peut accéder (lire, écrire, modifier) à ces deux dossiers :
E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
Autres conseils
OH MON DIEU
move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
Ne fais pas ça. $_FILES['file']['name']
pourrait être ../../../../boot.ini
ou un certain nombre de mauvaises choses.Vous ne devriez jamais faire confiance à ce nom.Vous devez renommer le fichier autrement et associer le nom d'origine à votre nom aléatoire.Avec une utilisation minimale basename($_FILES['file']['name'])
.
Essayez d'ajouter un chemin.Le code suivant fonctionne pour moi :
<?php
if ( !empty($_FILES['file']) ) {
$from = $_FILES['file']['tmp_name'];
$to = dirname(__FILE__).'/'.$_FILES['file']['name'];
if( move_uploaded_file($from, $to) ){
echo 'Success';
} else {
echo 'Failure';
}
header('Location: http://www.mywebsite.com/dump/');
exit;
}
?>
Avertissement:move_uploaded_file() [function.move-uploaded-file] :Impossible de déplacer 'C:\WINDOWS emp\phpA30E.tmp' vers './people.xml' dans E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php à la ligne 3
est la ligne importante qui indique que vous ne pouvez pas placer le fichier là où vous le souhaitez et cela signifie normalement un problème d'autorisations
vérifiez que le processus exécutant l'application (normalement le processus des serveurs Web pour php) a le droit d'y écrire un fichier.
MODIFIER:
Accrochez-vous un peu J'ai sauté un peu. Le chemin vers le dossier en première ligne est-il correct ?
Une autre chose à observer est votre séparateur de répertoire, vous utilisez / dans une boîte Windows.
Ajoutez l'utilisateur IIS dans le groupe d'autorisations de sécurité des dossiers « dump » et accordez-lui un accès en lecture/écriture.
Créez un dossier nommé "image" avec l'autorisation du dossier 777
<?php
move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>