PHP-Anwendung auf einem MS-IIS: Fehler beim Datei-Upload
obiwan1973
- php
Hallo,
bin mir nicht sicher, in welche Rubrik dieser Beitrag passt, ich versuche es mal mit "PHP.
Wir haben hier eine schöne Intranet-Anwendung, die von mir auf einem XAMPP-Apache entwickelt wurde und wird.
Das Produktivsystem ist ein Windows-Server mit einem IIS.
Ich bekam beim Testen auf dem Livesystem (und bekomme sie nach wie vor) eine Fehlermeldung beim Upload von Dateien via PHP.
Notice: session_start() [function.session-start]: ps_files_cleanup_dir: opendir(C:\Windows\temp) failed: No error (0) in C:\inetpub\wwwroot............\detail.php on line 6
Ich bin mir 100% sicher, dass ich in der php.ini auf dem Server die Variable "upload_tmp_dir" geändert habe. Siehe nachstehender Auszug aus der php.ini.
[WebPIChanges]
error_log = "C:\Windows\temp\php53_errors.log"
upload_tmp_dir=C:\schroederstest\temp
session.save_path=C:\Windows\temp
cgi.force_redirect=0
cgi.fix_pathinfo=1
fastcgi.impersonate=1
fastcgi.logging = 1
max_execution_time=300
date.timezone=Europe/Belgrade
extension_dir="C:\Program Files (x86)\PHP\v5.3\ext"
Irgendetwas stimmt noch nicht. Aber was? Ich komme einfach nicht dahinter. Ich habe nach der Änderung in der php.ini den Webserver gestoppt und wieder gestartet, aber ohne Erfolg.
Hat jemand einen Tipp für mich?
Gruß
Thomas
Hallo,
Ich bekam beim Testen auf dem Livesystem (und bekomme sie nach wie vor) eine Fehlermeldung beim Upload von Dateien via PHP.Notice: session_start() [function.session-start]: ps_files_cleanup_dir: opendir(C:\Windows\temp) failed: No error (0) in C:\inetpub\wwwroot............\detail.php on line 6
Was du hier postest ist nur ein Hinweis, kein Fehler und er bezieht sich auch die Funktion session_start().
Ich bin mir 100% sicher, dass ich in der php.ini auf dem Server die Variable "upload_tmp_dir" geändert habe. Siehe nachstehender Auszug aus der php.ini.
[WebPIChanges]
session.save_path=C:\Windows\tempIrgendetwas stimmt noch nicht. Aber was? Ich komme einfach nicht dahinter. Ich habe nach der Änderung in der php.ini den Webserver gestoppt und wieder gestartet, aber ohne Erfolg.
Es geht also um den Pfad von session.save_path, der auch in dem Hinweis auftaucht. Ich würde Vermuten, dass der Hinweis erscheint, weil irgendwelche Berechtigungen nicht passen. Um da nicht an den Berechtigungen im Windows-Ordner rum zu schrauben solltest du den Pfad vielleicht so ändern, dass er außerhalb des Windows-Verzeichnises liegt und dann die Berechtigungen so anpassen das PHP bzw. der IIS darin arbeiten dürfen.
Gruß
Count
Tach!
Ich bin mir 100% sicher, dass ich in der php.ini auf dem Server die Variable "upload_tmp_dir" geändert habe.
Deine Gewissheit in allen Ehren, aber Kontrolle ist besser. Schau in die phpinfo()-Ausgabe, was PHP erkannt hat.
error_log = "C:\Windows\temp\php53_errors.log"
upload_tmp_dir=C:\schroederstest\temp
session.save_path=C:\Windows\temp
Schreib mal lieber die Verzeichnisse mit / statt . Windows versteht problemlos Slashes. Der Backslash ist auch noch die Einleitung von Escape-Sequenzen und man muss in manchen Situationen aufpassen, sie in korrekter Anzahl zu notieren. Das entfällt beim Wechsel zu Slashes.
Windows-Verzeichnisse sind nicht nur aus Berechtigungsgründen nicht empfehlenswert. Jede Anwendung sollte ihren eigenen Datenhaufen pflegen, und den abseits vom DocumentRoot. Es kann sonst passieren, dass Garbage-Collector-Einstellungen eines Projekts die Dateien eines anderen Projekts vorzeitig aufräumen und ähnliche gegenseitige Beeinflussungen.
dedlfix.
Hallo Ihr Beiden,
ich werde das mit dem Ändern der Verzeichnisse am Montag testen.
Danke Euch.
Gruß
Thomas
Hallo zusammen,
ich habe jetzt - wie besprochen - versucht, die drei Pfadangaben in der php.ini zu ändern, wo default-mäßig der Temp-Ordner von Windows eingetragen war.
Zu diesem Zweck habe ich in einem geschützten Verzeichnis unter C einen Temp-Ordner angelegt und dem IUSR (also dem Windows-Benutzer des IIS) sämtliche Rechte gegeben. So.
In zwei von drei Fällen hat PHP das geschluckt, nur beim Speicherort für das Logfile nicht.
Ich habe ein wenig getestet, habe das Original-Logfile in den Ordner reinkopiert, habe es mit einem leeren Logfile versucht, und immer schön die Rechte des IUSR kontrolliert, damit PHP keinen Grund hat zu meckern.
Es sieht so aus: Wenn ich bei "error_log" mein indiv. Temp-Verzeichnis nehme, kann ich die Seite im Browser nicht aufrufen.
500 - Interner Serverfehler.
Problem bei der gesuchten Ressource. Sie kann nicht angezeigt werden.
Was nun?
Sobald ich die Änderung wieder rückgängig mache (C:\Windows\Temp), geht's wieder.
[WebPIChanges]
error_log = "C:\Windows\Temp\php53_errors.log"
upload_tmp_dir=C:\meineanwendung\meinefirma\temp
session.save_path=C:\meineanwendung\meinefirma\temp
cgi.force_redirect=0
cgi.fix_pathinfo=1
fastcgi.impersonate=1
fastcgi.logging = 1
max_execution_time=300
date.timezone=Europe/Belgrade
extension_dir="C:\Program Files (x86)\PHP\v5.3\ext\"
Ehrlich: An den Rechten kann es nichtliegen ... der IUSR darf wirklich alles!
Also, wie bekomme ich das mit dem neuen Speicherort für das Logfile hin?
Gruß
Thomas
Tach!
500 - Interner Serverfehler.
Problem bei der gesuchten Ressource. Sie kann nicht angezeigt werden.
500er Fehler werden nach außen hin immer mit einem belanglosen Text angezeigt. Was wirklich los ist, schreibt der Webserver in sein Error-Log. Es ist beim 500er immer eine gute Idee, dort nachzuschlagen. (Bei Windows und IIS muss man vielleicht mit dem EventViewer schauen, das weiß ich nicht so genau.)
dedlfix.