2008-09-17 12 views
2

,:CGI.pm normal olarak geçici dosyalar mı oluşturur? Aşağıdaki kod, geçici dosyalar klasörünü ayırmaya yürütmek durumlarda bir makine hariç bütün, Windows sunucularda

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

değişken $tmpfile değerini '.\CGItemp1' atanır ve bu benim istediğim şey. Ancak, sunuculardan birinde hatalı olarak C:\temp\CGItemp1 olarak ayarlandı.

Tüm sunucular Windows 2003 Standard Edition, IIS6 ve ActivePerl 5.8.8.822 (sonraki bir sürümde değil, Perl sürümüne yükseltme) çalıştırıyor. Komut satırında veya CGI komut dosyası olarak IIS'de bir komut dosyası çalıştırıldığında sonuç her zaman aynıdır (burada scriptmap .pl = c:\perl\bin\perl.exe "%s" %s).

Bu Perl yüklemesini nasıl düzeltebilirim ve varsayılan olarak '.\CGItemp1' dönmek üzere zorlayabilirim?

Tüm Perl klasörünü çalışan sunuculardan birinden bu makineye kopyaladım, ancak sevinç yok.

@Hometoast:

Ben ' TMP' ve ' TEMP' ortam değişkenleri ve ayrıca $ENV{TMP} ve $ENV{TEMP} kontrol ve onlar aynılar.

Komut satırından

onlar örneğin, kullanıcı profili dizinine işaret:

: CGI komut ikisi de nokta olarak IIS altında çalışacak

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

c:\windows\temp

kayıt tuşu HKEY_USERS/.DEFAULT/Environment yılında 0

, her iki sunucular vardır: CGITempFile() ait ActiveState uygulaması açıkça geçici klasör oluşturmak gerektiğinin belirlenmesi için alternatif bir mekanizma kullanıyor

%USERPROFILE%\Local Settings\Temp

.

@Ranguard:

gerçek bir sorun CGI.pm modülü ve ek işleme ile. Bir dosya siteye yüklendiğinde, CGI.pm siteye geçici bir yerde depolanması gerekir. Bunu yapmak için CGITempFile(), geçici bir klasör ayırmak üzere CGI.pm içinde çağrılır. Maalesef File::Temp kullanamıyorum. Yine de teşekkürler. bir demet yardımcı

@Chris:

. Daha önce CGI.pm kaynağından hızlı bir tarama yaptım, ancak öneriniz geri dönmemi ve altta yatan algoritmayı anlamak için daha çok çalışmamı sağladı. İşlerim var, ama en garip şey, sunucuda aslen c:\temp klasörünün olmamasıydı.

Geçici bir düzeltme elde etmek için bir c:\temp klasörü oluşturdum ve web sitesinin anonim kullanıcı hesabı için ilgili izinleri ayarladım. Ama bu paylaşılan bir kutu olduğu için, geçici dosyalar silinmiş olsa bile, işleri bu şekilde bırakamadım. Kısa bir hikayeyi kısaltmak için, c:\temp klasörünü farklı bir şeye dönüştürdüm ve sihirli bir şekilde doğru '.\' klasör yolu döndürülüyordu. Ayrıca, müşterinin site üzerindeki FrontPage uzantılarını etkinleştirdiğini fark ettim, bu da web sitesi klasörlerindeki anonim kullanıcı hesabına yazma erişimini kaldırarak, bu izinlerin yeniden uygulanması gerekiyordu. Bu sorunun başlangıcında neden CGITempFile()'un c:\temp döndürdüğünü, bu klasörün bulunmamasına ve neden yeniden sihirli olarak çalışmaya başladığına dair bir kayıp yaşıyorum.

cevap

8

geçici dizinin adı CGI.pm içinde find_tempdir fonksiyonunda $CGITempFile::TMPDIRECTORY düzenlenen ve başlangıca getirilir HKEY_USERS'ın altında TMP için kayıt defterindeki değerleri ve TEMP kontrol . Geçici dizini seçme algoritması CGI.pm belgelerinde açıklanmıştır (-özel_temp dosyaları). IIUC, sunucuda bir C: \ Temp klasörü varsa, CGI.pm bunu kullanır. Dizinlerin hiçbiri find_tempdir'da işaretlenmemişse, o zaman geçerli dizin "." kullanıldı.

Umarım bu yardımcı olur.

1

Bu betiği sizin gibi çalıştırıyorsanız, farklı olup olmadığını görmek için% TEMP% ortam değişkenini kontrol edin. IIS infaz edilirse

,/.DEFAULT/Çevre

2

Sorunuzun doğrudan yanıtı yok, ancak File::Temp'u kullanmayı denediniz mi?

Özellikle herhangi bir işletim sisteminde çalışmak üzere tasarlanmıştır.