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?

Était-ce utile?

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']);
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top