С нами с 09.03.06
Сообщения: 772
Рейтинг: 143
|
Добавлено: 29/04/06 в 13:14 |
Есть утилита, например, proga. При запуске её из shell "proga -a -b -c ..." она работает правильно и не ругается.
При запуске её из CGI-скрипта на Perl
$q="proga -a -b -c ...";
system($q);
утилита не находит какую-то там свою домашнюю директорию. Если я перед вызовом прописываю $ENV{HOME}='....', то домашнюю директорию она находит, но клинится на чём-то другом.
Отсюда я делаю вывод, что нужно перед вызовом system() установить все переменные окружения, которые установлены при вызове программы из shell.
Как это сделать???
CGI-скрипт запускается тем же пользователем, что и shell.
|
|
|
|
С нами с 18.01.06
Сообщения: 322
Рейтинг: 487
|
Добавлено: 29/04/06 в 13:21 |
Попробуй использовать функцию passthru вместо system, она выводит результат выполнения, если произходит ошибка, то сможешь узнать что за ошибка проиходит...
|
|
|
|
С нами с 09.03.06
Сообщения: 772
Рейтинг: 143
|
Добавлено: 29/04/06 в 13:36 |
Я знаю, что за ошибки происходят. Это видно по логам. В принципе можно установить все переменные, из-за которых происходят ошибки, и всё будет работать. Но это какой-то кривой способ. Хочется научиться восстанавливать ВСЁ окружение. Чтобы вызов из CGI-скрипта был тождествен вызову из shell.
|
|
|
|
С нами с 18.01.06
Сообщения: 322
Рейтинг: 487
|
Добавлено: 29/04/06 в 13:52 |
kbot писал: | Есть утилита, например, proga. При запуске её из shell "proga -a -b -c ..." она работает правильно и не ругается.
При запуске её из CGI-скрипта на Perl
$q="proga -a -b -c ...";
system($q);
утилита не находит какую-то там свою домашнюю директорию. |
А что если изначально прописать полный путь к утилите, т.е.
$q ="/path_to_proga/proga -a -b -c";
system($q);
|
|
|
|
С нами с 25.12.03
Сообщения: 1003
Рейтинг: 462
|
Добавлено: 29/04/06 в 14:36 |
делай так:
$q="HOME=/home/blabla/каталог proga -a -b -c ...";
|
|
|
|
старый зануда
С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361
|
Добавлено: 29/04/06 в 16:48 |
kbot писал: | ...Отсюда я делаю вывод, что нужно перед вызовом system() установить все переменные окружения, которые установлены при вызове программы из shell... |
Ты делаешь неправильный вывод - переменные окружения httpd никакого отношения ни к шеллу, ни к системе не имеют. Дело в том, что если ты запускаешь скрипт через cgi то он считается запущенным веб-сервером, каковой работает из под пользователя ("apache" или "nobody"), не имеющего домашнего каталога в системе (кто не верит может почитать "/etc/passwd"), т.к. главное не кто владелец файла, а кто его запустил. Поэтому если не будет прописан полный путь к файлу от корня, ничего работать не будет...
|
|
|
|
старый зануда
С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361
|
Добавлено: 29/04/06 в 17:59 |
А если точнее, то по идее, эту прогу нужно запускать так:
Код: | $q="cd /домашний/каталог/этой/проги; proga -a -b -c ...";
system($q); |
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |