Wątek zamknięty

Otwieranie plików w skryptach CGI

 
indris
Wdrażany
Liczba postów: 16
Post: #1

Otwieranie plików w skryptach CGI


Mam Windows 7 Home Premium i zainstalowany IIS 7.5.
Próbuję uruchomić skrypt, który napisany był w Perlu i działał poprawnie na serwerze linuksowym. W przeglądarce wpisuję

http://localhost/gamecgi/zgadywanka.cgi

Dostaję następujący komunikat:

Software error:
Niemożliwe otwarcie pliku słów at C:\inetpub\wwwroot\gamecgi\zgadywanka.cgi line 38.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.

W wierszach 37 i 38 inkryminowanego skryptu jest:

$datafile="answers.dat";
open FH, $datafile or die "Niemożliwe otwarcie pliku słów";

Plik answers.dat istnieje w tym samym folderze co skrypt. Nadałem mu w Eksploratorze ( jak umiałem) wszystkie możliwe uprawnienia i to dla wszystkich zauważonych użytkowników. I klops.
Co mam zrobić, żeby skrypt był łaskaw otwierać plik ?
.

12.11.2010 12:55

Znajdź wszystkie posty użytkownika
indris
Wdrażany
Liczba postów: 16
Post: #2

RE: Otwieranie plików w skryptach CGI


(12.11.2010 12:55)indris napisał(a):  Mam Windows 7 Home Premium i zainstalowany IIS 7.5.
Próbuję uruchomić skrypt, który napisany był w Perlu i działał poprawnie na serwerze linuksowym. W przeglądarce wpisuję

http://localhost/gamecgi/zgadywanka.cgi

Dostaję następujący komunikat:

Software error:
Niemożliwe otwarcie pliku słów at C:\inetpub\wwwroot\gamecgi\zgadywanka.cgi line 38.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.

W wierszach 37 i 38 inkryminowanego skryptu jest:

$datafile="answers.dat";
open FH, $datafile or die "Niemożliwe otwarcie pliku słów";

Plik answers.dat istnieje w tym samym folderze co skrypt. Nadałem mu w Eksploratorze ( jak umiałem) wszystkie możliwe uprawnienia i to dla wszystkich zauważonych użytkowników. I klops.
Co mam zrobić, żeby skrypt był łaskaw otwierać plik ?
.

Znalazłem wyjście, dla tego skryptu, ale go nie rozumiem.

Okazało się, że "sekret" działania skryptu polegał na tym, że do tego samego pliku należało się odwoływać raz przez jego "gołą" nazwę a innym razem przez względną ścieżkę.
Tak więc: w procedurze
sub newgame {
my ($datafile, @answers,$index1, $i, $raport);
$datafile="$Prefiks/answers.dat";
if(-e $datafile) { # DODANE 14.11.2010
open FH, $datafile or die "Niemożliwe otwarcie pliku słów";
@answers = <FH>;
close (FH);
$raport = " Odpowiedzi wczytano z pliku $datafile";
} else {
@answers = ("lemur", "sifaka", "indris", "wari", "katta"); # UWAGA zastępstwo
$raport = " Odpowiedzi ustawiono w tablicy (";
for($i = 0; $i < @answers; $i++) {
$raport .= " $answers[$i]";
}
$raport .= " )";
}
srand(time ^ $$);
$index1 = $#answers * rand;
$TheAnswer = $answers[$index1];
chomp($TheAnswer);
$TheMisses = "-";
$TheHits = "";
for($i = 0; $i < length($TheAnswer); $i++) {
$TheHits .= "-";
}
displayresult("Start Gry: ".$raport); # UWAGA!!
}
plik został znaleziony dopiero wtedy, gdy nazwa pliku była dopełniona nazwą katalogu (zmienna $Prefiks)

Natomiast w konstrukcji

if(-e "$Prefiks/hang${len}.gif") {
print
#CHOLERA $Co->img( {-src=>"$Prefiks/hang${len}.gif",
$Co->img( {-src=>"hang${len}.gif",
-align=>'left', -vspace=>10, -hspace=>1}
);
} else {
print"<h3> Nie widać pliku: ", "$Prefiks/hang${len}.gif</h3>";
}

przy sprawdzaniu istnienia pliku trzeba było użyć ścieżki, natomiast przy znaczniku img nie można było jej użyć.

Adres wpisany do przeglądarki był: http://localhost/gamecgi/mikrozgadywankaWR.cgi

Niby więc wszystko jest OK, ale skrypt przestał być przenośny, bo na serwerze linuksowym chyba by ten skrypt nie zadziałał. tak jak skrypt z serwera linuksowego nie chciał działać u mnie.

Może ktoś umie wyjaśnić to zjawisko ?

16.11.2010 01:27

Znajdź wszystkie posty użytkownika
indris
Wdrażany
Liczba postów: 16
Post: #3

RE: Otwieranie plików w skryptach CGI


Udało mi się doprowadzić skrypt do przenośności. Polegało to na tym, że wymuszam ustawienie katalogu bieżącego na taki, który wynika z jego "wywołania". Na IIS to działa, n linuksowym Apache również, chociaż tam de facto nic nie robi.
Przy okazji dowiedziałem się od przyjaciół, że identyczny problem mieli już wcześniej inni:
http://groups.google.com/g/f837ff08/t/56...56cf25c42d
http://groups.google.com/group/comp.lang...b26f2b8d96
Zasadnicze pytanie jest więc takie:
Czy (i ewentualnie jak0 można skonfigurować serwer IIS7 tak, żeby przy wykonywaniu się aplikacji CGI napisanej w Perlu bieżący katalog był taki, jak katalog, na którym jest skrypt ?

28.11.2010 01:28

Znajdź wszystkie posty użytkownika
Wątek zamknięty

Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Zapisywanie i otwieranie plików w Windows 7 qwertyx12 0 3.249 10.02.2011 21:22
Ostatni post: qwertyx12
Rozwiązany Otwieranie plików przez Worda (rozwiązany) kamisiu91 7 11.896 02.05.2010 17:10
Ostatni post: Portator
Spowolnione/podwójne otwieranie okien sth01 7 8.943 13.01.2010 23:12
Ostatni post: Nostromo
« Starszy wątek | Nowszy wątek »

Temat został oceniony na 0 w skali 1-5 gwiazdek.
Zebrano 0 głosów.