Domanda

Sto provando a scrivere un po' di PHP per caricare un file in una cartella sul mio server web.Ecco cosa ho:

<?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>

Ricevo questi errori:

Avvertimento:move_uploaded_file(./test.txt) [funzione.move-file-caricato]:Fallimento nell'apertura del flusso:Autorizzazione negata in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php alla riga 3

Avvertimento:move_uploaded_file() [funzione.sposta-file-caricato]:Impossibile spostare "C:\WINDOWS emp\phpA30E.tmp" in "./test.txt" in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php alla riga 3

Avvertimento:Impossibile modificare le informazioni sull'intestazione: intestazioni già inviate da (output avviato in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3) in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ upload.php sulla riga 4

PHP versione 4.4.7 Esecuzione di IIS su una casella Windows.Questo particolare file/cartella ha 777 permessi.

Qualche idea?

È stato utile?

Soluzione

Dato che è Windows, non esiste un vero 777.Se stai usando chmod, controlla i commenti relativi a Windows.

Verifica che l'account IIS possa accedere (leggere, scrivere, modificare) a queste due cartelle:

E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\

Altri suggerimenti

Oh mio Dio

move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);

Non farlo. $_FILES['file']['name'] potrebbe essere ../../../../boot.ini o un numero qualsiasi di cose brutte.Non dovresti mai fidarti di questo nome.Dovresti rinominare il file in qualcos'altro e associare il nome originale al tuo nome casuale.Al minimo utilizzo basename($_FILES['file']['name']).

Prova ad aggiungere un percorso.Il seguente codice funziona per me:

<?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;
}
?>

Avvertimento:move_uploaded_file() [funzione.sposta-file-caricato]:Impossibile spostare "C:\WINDOWS emp\phpA30E.tmp" in "./people.xml" in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php alla riga 3

è la riga importante che dice che non puoi mettere il file dove vuoi e questo normalmente significa un problema di permessi

controlla che il processo che esegue l'app (normalmente il processo del server web per php) abbia i diritti per scrivere un file lì.

MODIFICARE:

Appendi un po 'ho saltato la pistola un po' è il percorso del file nella prima riga corretta?

Un'altra cosa da osservare è il separatore di directory, che stai utilizzando / in una finestra di Windows..

Aggiungere l'utente IIS nel gruppo di autorizzazioni di sicurezza delle cartelle "dump" e concedergli l'accesso in lettura/scrittura.

Crea una cartella denominata "immagine" con l'autorizzazione della cartella 777

<?php
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top