obiwan1973: PHP-Anwendung auf einem MS-IIS: Fehler beim Datei-Upload

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

  1. 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\temp

    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.

    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

  2. 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.

  3. Hallo Ihr Beiden,

    ich werde das mit dem Ändern der Verzeichnisse am Montag testen.

    Danke Euch.

    Gruß

    Thomas

  4. 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

    1. 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.