URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4421
[ Назад ]

Исходное сообщение
"Команда system() в Perl"

Отправлено Eugene , 29-Июн-05 18:22 
Никак не могу понять в чем проблема.

Когда пишу вот это в командной строке, все работает прекрасно.
/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc

А когда пытаюст сделать то же самое в cgi-скрипте командой system
system("/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc");

то команда не исполняется. Не подскажете почему?


Содержание

Сообщения в этом обсуждении
"Команда system() в Perl"
Отправлено gyn61 , 29-Июн-05 19:05 
>Когда пишу вот это в командной строке, все работает прекрасно.
>/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc
>
>А когда пытаюст сделать то же самое в cgi-скрипте командой system
>system("/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc");
>
>то команда не исполняется. Не подскажете почему?

Наугад:
system("/home/eugene/staroffice7/soffice -pt \\\"PDF converter\\\" /home/eugene/test.doc");


"Команда system() в Perl"
Отправлено Eugene , 29-Июн-05 19:33 
Думуаю, команда правильно написана... Тут что-то странное: скрипт запускается нормально из командной строки: ./test.cgi
И system нормально работает...

Но system не работает, когра запуская скрипт через URL. С правами доступа все нормально...


>>Когда пишу вот это в командной строке, все работает прекрасно.
>>/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc
>>
>>А когда пытаюст сделать то же самое в cgi-скрипте командой system
>>system("/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc");
>>
>>то команда не исполняется. Не подскажете почему?
>
>Наугад:
>system("/home/eugene/staroffice7/soffice -pt \\\"PDF converter\\\" /home/eugene/test.doc");



"Команда system() в Perl"
Отправлено rWizard , 29-Июн-05 19:41 
su -l www -c '/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc'

поможет в дигностике.
или поробуйте в скрипте
open(CMD,'/home.... 2>&1 |'); my @errors = <CMD>; print join('<br>',@errors);
и прочитать что выводиться в stderr/stdout.


"Команда system() в Perl"
Отправлено Eugene , 29-Июн-05 22:12 
Добавил в скрипт

open(CMD,'/home.... 2>&1 |'); my @errors = <CMD>; print join('<br>',@errors);

Получил вот это:

/path/soffice.bin X11 error: Can't open display:
Set DISPLAY environment variable, use -display option
or check permissions of your X-Server
(See "man X" resp. "man xhost" for details)

Хотя DISPLAY в environment есть.

Добавил в скрипт
system("export DISPLAY=:25");
но ошибка та же. Разбираюсь. Спасибо за подсказку.

>su -l www -c '/home/eugene/staroffice7/soffice -pt \"PDF converter\" /home/eugene/test.doc'
>
>поможет в дигностике.
>или поробуйте в скрипте
>open(CMD,'/home.... 2>&1 |'); my @errors = <CMD>; print join('<br>',@errors);
>и прочитать что выводиться в stderr/stdout.



"Команда system() в Perl"
Отправлено chip , 29-Июн-05 23:03 
>Получил вот это:
>
>/path/soffice.bin X11 error: Can't open display:
>Set DISPLAY environment variable, use -display option
>or check permissions of your X-Server
>(See "man X" resp. "man xhost" for details)
>
>Хотя DISPLAY в environment есть.
>
>Добавил в скрипт
>system("export DISPLAY=:25");
>но ошибка та же. Разбираюсь. Спасибо за подсказку.

Пользователь www (или тот от которого запускается скрипт) не имеет соответсвующих прав для коннекта к X'aм. О чем они[X'ы] Вам честно и сообщают:
"...or check permissions of your X-Server"

Выставление env DISPLAY в данном случае не поможет.

Глубоко в X'ое взаимодействие в данном ракурсе не вдавался. Но, полагаю, нужно рыть в сторону xauth и подобных.


"Команда system() в Perl"
Отправлено Eugene , 29-Июн-05 23:29 
Скрипт из командной строки работает прекрасно. Насколько я понимаю, когда я запускаю скрипт через URL, он также запускается от имени владельца. Так что разницы никакой нет. Или я не прав?

Просто никак не могу понять в чем проблема.

#!/opt/bin/perl -w
print "Content-type: text/html\n\n";

system("/path/soffice -pt \"PDF converter\" /path/test.doc");

open(CMD,'/path/soffice -pt \"PDF converter\" /path/test.doc 2>&1 |'); my @errors = <CMD>; print join('<br>',@e
rrors);

Скрипт конвертит doc в pdf из командной строки.
Зачем ему DIPLAY понадобился при запуске из URL? Эта переменная уже прописана в environments... И из командной стори работает же все...


>>Получил вот это:
>>
>>/path/soffice.bin X11 error: Can't open display:
>>Set DISPLAY environment variable, use -display option
>>or check permissions of your X-Server
>>(See "man X" resp. "man xhost" for details)
>>
>>Хотя DISPLAY в environment есть.
>>
>>Добавил в скрипт
>>system("export DISPLAY=:25");
>>но ошибка та же. Разбираюсь. Спасибо за подсказку.
>
>Пользователь www (или тот от которого запускается скрипт) не имеет соответсвующих прав
>для коннекта к X'aм. О чем они[X'ы] Вам честно и сообщают:
>
>"...or check permissions of your X-Server"
>
>Выставление env DISPLAY в данном случае не поможет.
>
>Глубоко в X'ое взаимодействие в данном ракурсе не вдавался. Но, полагаю, нужно
>рыть в сторону xauth и подобных.



"Команда system() в Perl"
Отправлено chip , 05-Июл-05 09:39 
>Скрипт из командной строки работает прекрасно.

Вывод env или set в студию. Из той среды, из которой данный скрипт работает успешно.


> Насколько я понимаю, когда я запускаю
>скрипт через URL, он также запускается от имени владельца.

при отсутсвии различных su*, он запускается от имени пользователя, под которым работает apache. Выполните данный скрипт, как вы выражаетесь, через URL:

#!/bin/sh

echo "Content-type: text/plain"
echo

set 2>/dev/null || env 2>/dev/null

вывод его в студию.

> Так что
>разницы никакой нет. Или я не прав?

не правы

>Просто никак не могу понять в чем проблема.

см. предыдущий мой пост.