Frage

Auf all meinem Windows-Server, mit Ausnahme einer Maschine, wenn ich ausführen der folgende Code einen Ordner für temporäre Dateien zuweisen:

use CGI;
my $tmpfile = new CGITempFile(1);
print "tmpfile='", $tmpfile->as_string(), "'\n";

Die Variable $tmpfile wird der Wert '.\CGItemp1' zugewiesen und das ist, was ich will. Aber auf einem meines Server ist es falsch eingestellt C:\temp\CGItemp1.

Alle Server mit Windows 2003 Standard Edition, IIS6 und ActivePerl 5.8.8.822 (später zu Perl-Version Upgrade keine Option). Das Ergebnis ist immer das gleiche, wenn ein Skript von der Kommandozeile oder in IIS als CGI-Skript ausgeführt wird (wobei Skriptzuordnung .pl = c:\perl\bin\perl.exe "%s" %s).

Wie kann ich diese Perl-Installation reparieren und es zwingen, zurückzukehren ‚.\CGItemp1‘ standardmäßig?

Ich habe sogar kopiert den gesamten Perl-Ordner von einem des Arbeits Servers zu dieser Maschine, aber keine Freude.

@Hometoast:

Ich habe die ‚TMP‘ und ‚TEMP‘ Umgebungsvariablen und auch $ENV{TMP} und $ENV{TEMP} und sie sind identisch.

Von Befehlszeile sie in das Benutzerprofil-Verzeichnis zeigen, zum Beispiel:

  

C:\DOCUME~1\[USERNAME]\LOCALS~1\Temp\1

Wenn er ausgeführt wird unter IIS als CGI-Skript sie beide auf:

  

c:\windows\temp

In Registrierungsschlüssel HKEY_USERS/.DEFAULT/Environment, beiden Server haben:

  

%USERPROFILE%\Local Settings\Temp

Die Active Implementierung von CGITempFile() eindeutig einen alternativen Mechanismus verwendet, um zu bestimmen, wie es sollte die temporären Ordner erzeugen.

@Ranguard:

Das eigentliche Problem ist mit dem CGI.pm Modul und Befestigung Handhabung. Jedes Mal, wenn eine Datei auf die Website hochgeladen CGI.pm es irgendwo temporär speichern muss. Dazu wird diese CGITempFile() innerhalb CGI.pm genannt einen temporären Ordner zuzuweisen. So kann ich leider nicht File::Temp verwenden. Trotzdem danke.

@ Chris:

Das half ein Bündel. Ich habe eine schnelle Scan durch die CGI.pm Quelle haben früher aber Ihren Vorschlag machte mich zurück und betrachten es geflissentlich den zugrunde liegenden Algorithmus zu verstehen. Ich habe Dinge zu arbeiten, aber das Merkwürdigste ist, dass es ursprünglich keine c:\temp Ordner auf dem Server war.

eine temporäre Lösung erhalten ich einen c:\temp Ordner erstellt und legen Sie die entsprechenden Berechtigungen für die anonyme Benutzerkonto Webseite. Aber da dies eine gemeinsame Box konnte ich nicht Dinge lassen auf diese Weise, auch wenn die temporären Dateien gelöscht wurden. Um eine lange Geschichte kurz zu machen, umbenannt ich den c:\temp Ordner etwas anderes und auf magische Weise die korrekte ‚.\‘ Ordnerpfad zurückgegeben wurde. Ich habe auch bemerkt, dass der Kunde auf der Website Frontpage-Erweiterungen aktiviert hatte, die für das anonyme Benutzerkonto auf der Website Ordner Schreibzugriff entfernt, so dass diese Erlaubnis erforderlich Wieder Anwendung. Ich bin immer noch ratlos, warum zu Beginn dieser Ausgabe CGITempFile() c:\temp zurückkehrt, obwohl der Ordner nicht vorhanden ist, und warum magisch es begann wieder zu arbeiten.

War es hilfreich?

Lösung

Der Name des temporären Verzeichnisses wird in $CGITempFile::TMPDIRECTORY und initialisiert in der find_tempdir Funktion in CGI.pm. gehalten Der Algorithmus für die Auswahl der temporären Verzeichnis in der CGI.pm-Dokumentation beschrieben wird (Suche nach -private_tempfiles ). IIUC, wenn ein C: \ Temp-Ordner auf dem Server vorhanden ist, wird CGI.pm verwenden. Falls keine der in find_tempdir geprüft Verzeichnisse vorhanden, dann das aktuelle Verzeichnis „“ verwendet wird.

Ich hoffe, das hilft.

Andere Tipps

Nicht die direkte Antwort auf Ihre Frage, aber haben Sie versucht, mit File :: Temp ?

Es ist speziell entwickelt, um auf jedem Betriebssystem zu arbeiten.

Wenn Sie dieses Skript ausführen, wie Sie, das% TEMP% Umgebungsvariable überprüfen, ob zu sehen, ob es unterscheidet.

Wenn IIS ausgeführt wird, überprüfen Sie die Werte in der Registry für TMP und TEMP unter HKEY_USERS / .DEFAULT / Umwelt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top