
rzadko zdarza mi się pisać na forach ale natknąłem się na problem, który spędza mi sen z powiek.
Nie jestem zaawansowanym "skryptologiem", ale co nieco się "orientuję". Proszę o poważne komentarze
z próbą wyjaśnienia zjawiska a nie sugerujące inne rozwiązania (jak choćby wykorzystanie zmiennej PWD
czy napisanie w php).
Mam napisanych kilka skryptów .cgi w bashu. Poniżej ten, w którym występuje zjawisko:
Kod: Zaznacz cały
#! /bin/bash
k1=${HTTP_REFERER#*mainfolder/}
k1=${k1%%/*}
f1="/var/mainfolder/$k1"
echo $f1 $k1 ${#k1}
while read x; do echo $x; done < $f1/parametry
Linia "echo $f1 $k1 ${#k1}" służy mi jedynie do sprawdzenia poprawności zmiennych w diagnozie problemu.
Problem jest następujący:
wartość f1 /var/mainfolder/mojfolder1
wartość k1 mojfolder1
wartość ${#k1} 10
Skrypt działa prawidłowo - zwraca odpowiednie parametry. Komenda echo w skrypcie wyrzuca
poprawne wartości zmiennych (jak wyżej), ale w error.log mam komunikat o błędzie:
[Thu Mar 06 10:05:03 2014] [error] [client x.x.x.x] /var/www/cgi-bin/x.cgi: line 6: /var/mainfolder//parametry: No such file or directory
tzn. jakby zmienna k1 była pusta ??????
Moje testy:
1. Zjawisko występuje przy wywołaniu z IE. Błąd nie występuje przy wywołaniu z Firefoxa.
2. Użycie innej zmiennej zamiast HTTP_REFERER (np. PWD) nie generuje błędu również w IE
3. HTTP_REFERER ma zawsze wartości prawidłowe
4. W innych skryptach również posługuję się w ten sam sposób zmienną HTTP_REFERER i błąd nie występuje,
ale uwaga: jest inny sposób wywoływania skryptu z html. W działających bez błędu - z form. Błędny - jako object.
Aha - Apache 2.2.22
Pomóżcie mi zrozumieć. Jak to możliwe, że zmienna ma wartość, skrypt działa a log wykazuje ją jako pustą?
pozdrawiam