PHP-Fehler – Hochladen einer Datei
Frage
Ich versuche, PHP zu schreiben, um eine Datei in einen Ordner auf meinem Webserver hochzuladen.Folgendes habe ich:
<?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>
Ich erhalte diese Fehler:
Warnung:move_uploaded_file(./test.txt) [function.move-uploaded-file]:Fehler beim Öffnen des Streams:Berechtigung in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php in Zeile 3 verweigert
Warnung:move_uploaded_file() [function.move-uploaded-file]:„C:\WINDOWS emp\phpA30E.tmp“ kann nicht nach „./test.txt“ in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php in Zeile 3 verschoben werden
Warnung:Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von (Ausgabe gestartet unter E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3) in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ upload.php in Zeile 4
PHP Version 4.4.7 Ausführen von IIS in einer Windows -Box.Diese bestimmte Datei/dieser bestimmte Ordner verfügt über 777 Berechtigungen.
Irgendwelche Ideen?
Lösung
Da es sich um Windows handelt, gibt es kein echtes 777.Wenn Sie verwenden chmod, überprüfen Sie die Windows-bezogenen Kommentare.
Überprüfen Sie, ob das IIS-Konto auf diese beiden Ordner zugreifen (lesen, schreiben, ändern) kann:
E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
Andere Tipps
OMG
move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
Tu das nicht. $_FILES['file']['name']
könnte sein ../../../../boot.ini
oder jede Menge schlechte Dinge.Sie sollten diesem Namen niemals vertrauen.Sie sollten die Datei anders umbenennen und den ursprünglichen Namen mit Ihrem zufälligen Namen verknüpfen.Bei minimaler Nutzung basename($_FILES['file']['name'])
.
Versuchen Sie, einen Pfad hinzuzufügen.Bei mir funktioniert folgender Code:
<?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;
}
?>
Warnung:move_uploaded_file() [function.move-uploaded-file]:„C:\WINDOWS emp\phpA30E.tmp“ kann nicht nach „./people.xml“ in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php in Zeile 3 verschoben werden
In der wichtigen Zeile heißt es, dass Sie die Datei nicht an der gewünschten Stelle ablegen können, was normalerweise auf ein Berechtigungsproblem hinweist
Überprüfen Sie, ob der Prozess, der die App ausführt (normalerweise der Webserver-Prozess für PHP), über die Rechte verfügt, dort eine Datei zu schreiben.
BEARBEITEN:
Bleib ein bisschen an, ich habe die Waffe ein wenig übersprungen. Ist der Weg zur Datei in der ersten Zeile korrekt?
Ein weiterer zu beachtender Punkt ist Ihr Verzeichnistrennzeichen. Sie verwenden / in einer Windows-Box.
Fügen Sie den IIS-Benutzer zur Sicherheitsberechtigungsgruppe der Ordner „dump“ hinzu und gewähren Sie ihm Lese-/Schreibzugriff.
Erstellen Sie einen Ordner mit dem Namen „image“ mit Ordnerberechtigung 777
<?php
move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>