2008-08-06 16 views
13

Próbuję napisać trochę PHP, aby przesłać plik do folderu na moim serwerze internetowym. Oto co mam:Błąd PHP - przesyłanie pliku

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

Dostaję te błędy:

Ostrzeżenie: move_uploaded_file (./ test.txt) [function.move przesłanych-file]: failed to open stream: Odmowa uprawnień w E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php na linii 3

Ostrzeżenie: move_uploaded_file() [function.move-uploaded-file]: Nie można przenieść "C: \ WINDOWS \ Temp \ phpA30E.tmp 'na' ./test.txt 'w E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php na linii 3

Ostrzeżenie: Nie można zmodyfikować informacji w nagłówku - nagłówki już wysłane przez (dane wyjściowe w E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php: 3) w E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php na linii 4

Wersja PHP 4.4.7 Uruchamianie usług IIS na skrzynce systemu Windows. Ten konkretny plik/folder ma 777 uprawnień.

Wszelkie pomysły?

Odpowiedz

8

Ponieważ jest to system Windows, nie ma prawdziwego 777. Jeśli używasz chmod, sprawdź komentarze związane z systemem Windows.

Sprawdź, czy konto IIS może uzyskać dostęp (odczyt, zapis, modyfikować) te dwa foldery:

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

Ostrzeżenie: move_uploaded_file() [function.move-uploaded-file]: Nie można przenieść "C: \ WINDOWS \ Temp \ phpA30E.tmp" do "./people.xml" w E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ \ upload.php wysypisko na linii 3

jest ważna linia mówi, nie można umieścić plik, w którym chcesz go, a to zwykle oznacza to problem z uprawnieniami

wyboru zakonczeniu aplikacja (zwykle proces serwera dla php) ma prawo do zapisania tam pliku.

EDIT:

powiesić na kawałku Skoczyłem pistolet trochę jest ścieżką do pliku w pierwszej linii są prawidłowe?

3

Spróbuj dodać ścieżkę. Poniższy kod działa dla mnie:

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

OMG

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

nie rób tego. $_FILES['file']['name'] może być ../../../../boot.ini lub dowolną liczbą złych rzeczy. Nigdy nie powinieneś ufać temu imieniu. Powinieneś zmienić nazwę pliku na coś innego i powiązać oryginalną nazwę z przypadkową nazwą. Przy minimalnym użyciu basename($_FILES['file']['name']).

1

Innym myśleć obserwować jest Twój separator katalogu używasz/w pudełku systemu Windows ..

1

Dodaj użytkownika usług IIS w folderach „zrzutu” Bezpieczeństwo grupy persmissions i dać go do odczytu/zapisu.

0

Utwórz folder o nazwie "obraz", za zgodą folderu 777

<?php 
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']); 
?>