Apache Perl $0

Модератор: Модераторы разделов

Ответить
Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Apache Perl $0

Сообщение ReSeR »

Почему когда скрипт выполняется в терминале

Код: Выделить всё

#!/usr/bin/perl -w
use 5.010;
use locale;
use strict;
use warnings;
use diagnostics;
use CGI::Carp qw(fatalsToBrowser);

my $img = "$0.png";
my $lnk = "http://site/images/131/$img";

print "Content-Type: text/html\n\n";
say '<p>';
print '<img src=',"$lnk",' align="top" clear="all"><br>';
...
...
...
то переменная $0 возвращает только имя, а если этот же скрипт выполняется в среде Apache (site/cgi-bin) то переменная $0 возвращает полный путь к файлу (/var/www/cgi-bin/script)?
Бэкап - акт проявления трусости.
Спасибо сказали:
Kopilov
Сообщения: 949
ОС: [K]Ubuntu, Debian

Re: Apache Perl $0

Сообщение Kopilov »

Наверно, Apache, запуская скрипт, передаёт интерпретатору Perl именно полный путь. Попробуй в терминале набрать полный путь -- что $0 вернёт?
Спасибо сказали:
Kopilov
Сообщения: 949
ОС: [K]Ubuntu, Debian

Re: Apache Perl $0

Сообщение Kopilov »

С Perl дела не имел, тест с bash:

Код: Выделить всё

$ cat test.sh
echo $0
$ ./test.sh
./test.sh
$ `pwd`/test.sh
/home/user/tmp/test.sh
$ bash test.sh
test.sh
$ bash `pwd`/test.sh
/home/user/tmp/test.sh
Спасибо сказали:
Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Re: Apache Perl $0

Сообщение ReSeR »

Kopilov писал(а):
23.10.2012 12:54
Попробуй в терминале набрать полный путь

ммм, что-то не совсем понял что сделать
Бэкап - акт проявления трусости.
Спасибо сказали:
Kopilov
Сообщения: 949
ОС: [K]Ubuntu, Debian

Re: Apache Perl $0

Сообщение Kopilov »

ReSeR писал(а):
23.10.2012 13:01
ммм, что-то не совсем понял что сделать

Пост 3 поясняет?
Сейчас какой командой запускаешь скрипт? Поменяй имя на полный путь. Если там уже полный путь -- странно.
Спасибо сказали:
Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Re: Apache Perl $0

Сообщение ReSeR »

Что-то я ничего не пойму.
Если запускаю скрипт из терминала

Код: Выделить всё

user@host:/var/www/cgi-bin/script
то ---> ./script.
Если перехожу на этот скрипт в Apache

Код: Выделить всё

http://192.168.1.1/cgi-bin/scrpt
то ---> /var/www/cgi-bin/script.
Если вызываю из "Geany" то ---> script.
Бэкап - акт проявления трусости.
Спасибо сказали:
Kopilov
Сообщения: 949
ОС: [K]Ubuntu, Debian

Re: Apache Perl $0

Сообщение Kopilov »

ReSeR писал(а):
23.10.2012 14:55
Если запускаю скрипт из терминала

Код: Выделить всё

user@host:/var/www/cgi-bin/script
то ---> ./script.

Это странно.
А если попробовать так:

Код: Выделить всё

user@host: perl /var/www/cgi-bin/script
Спасибо сказали:
Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Re: Apache Perl $0

Сообщение ReSeR »

Если

Код: Выделить всё

user@host: perl /var/www/cgi-bin/script
то возвращает script.
Бэкап - акт проявления трусости.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Apache Perl $0

Сообщение Bizdelnick »

Код: Выделить всё

$0 =~ m([^/]+$);
my $img = "$&.png";
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Re: Apache Perl $0

Сообщение ReSeR »

Дело в том, что меня интересует сама причина такого поведения. Я регуляркой и выкручиваюсь постоянно, но сам факт.
Бэкап - акт проявления трусости.
Спасибо сказали:
Ответить