Использование COM на php + Apache

  • Автор темы Grannas
  • Дата начала
Grannas

Grannas

Участник
Регистрация
27.02.2011
Сообщения
1 830
Реакции
10
Баллы
38
Ситуация:

Необходимо через php перехватить пользовательскую сессию почтовой программы через COM объект и в рамках этой сессии сохранить письмо в почтовом ящике. Делается этот вот таким небольшим кодом:
PHP:
<?php
$session = new COM( "Lotus.NotesSession" );$session->Initialize('Пароль пользователя');
echo "User: $session->CommonUserName <br>";
$db = $session->getDatabase( "Сервер пользователя", "Путь к почтовому файлу" );$mail = $db->CreateDocument();$form = $mail->AppendItemValue('Form', "Memo");$subject = $mail->AppendItemValue('Subject', "TestovoePismo");$sendto = $mail->ReplaceItemValue('SendTo', "Группа получателей");$body = $mail->CreateRichTextItem( "Body" );$bodytext = $body->AppendText( "Texttestovogopisma" );$save = $mail->Save(False, True);
$session = null;
?>

В командной строке скрипт без проблем и ошибок выполняется (если запустить через "c:\Путь_к_php c:\Путь_к_файлу"), а вот при выполнении сего кода в браузере апач выдает 500 ошибку. В error.log сообщение нечитаемое ибо не настроена локаль, а лог пишется в cp1251. Апач и соответственно php запущен под тем же пользователем, что и то приложение, сессию которого нужно перехватить COM объектом.
PHP:
<php
$a = exec("whoami");
echo $a;
?>
Выдает того самого нужного юзера.



Вопрос: почему оно не работает через браузер?
 
vOFF4eG

vOFF4eG

LPD: Агат
Регистрация
26.01.2009
Сообщения
8 439
Реакции
39
Баллы
0
Потому что гладиолус...
 
OP
Grannas

Grannas

Участник
Регистрация
27.02.2011
Сообщения
1 830
Реакции
10
Баллы
38
G

ga MAD

Активный участник
Регистрация
27.02.2007
Сообщения
5 185
Реакции
179
Баллы
63
ы?
whoami на серваке даст немного другой результат чем на клиенте. Вернее, не так. whoami на серваке исполняется, и даст соответствующее имя пользователя.
 
OP
Grannas

Grannas

Участник
Регистрация
27.02.2011
Сообщения
1 830
Реакции
10
Баллы
38
ы?
whoami на серваке даст немного другой результат чем на клиенте. Вернее, не так. whoami на серваке исполняется, и даст соответствующее имя пользователя.

А причем тут клиент? Приложение запущено на сервере. На нем же поднят Apache + php, которые запущены под тем же самым пользователем. "whoami" покажет от чьего имени выполняется php скрипт в браузере.
 
G

ga MAD

Активный участник
Регистрация
27.02.2007
Сообщения
5 185
Реакции
179
Баллы
63
В 99% случаев это одно и тоже. Или я не прав?
php выполняется НА СЕРВЕРЕ. А НЕ в браузере. Когда ты тестишь на своей машине - машина одна и все работает как ты хочешь. А для юзверей - whoami всегда будет выдавать один ответ - имя пользователя, от которого запущен php сервер НА СЕРВЕРЕ.
 
dalex

dalex

Новичок
Регистрация
15.02.2006
Сообщения
17 333
Реакции
49
Баллы
0
php выполняется НА СЕРВЕРЕ. А НЕ в браузере. Когда ты тестишь на своей машине - машина одна и все работает как ты хочешь. А для юзверей - whoami всегда будет выдавать один ответ - имя пользователя, от которого запущен php сервер НА СЕРВЕРЕ.
Я так понимаю что браузер он запускает на сервере.
 
G

ga MAD

Активный участник
Регистрация
27.02.2007
Сообщения
5 185
Реакции
179
Баллы
63
Я так понимаю что браузер он запускает на сервере.
Когда тестирует сам - да, и потому все работает. А как целевой аудитории дает с других машин залезть - так облом.
 
OP
Grannas

Grannas

Участник
Регистрация
27.02.2011
Сообщения
1 830
Реакции
10
Баллы
38
php выполняется НА СЕРВЕРЕ. А НЕ в браузере. Когда ты тестишь на своей машине - машина одна и все работает как ты хочешь. А для юзверей - whoami всегда будет выдавать один ответ - имя пользователя, от которого запущен php сервер НА СЕРВЕРЕ.

Я понимаю, что он выполняется на сервере, а не в браузере. Мне и надо чтобы он выполнялся на сервере и перехватывал сессию программы на том же самом сервере. Проблема в том, что в командной строке (минуя апач) все это безобразие прекрасно работает, а при выполнении того же скрипта в браузере (после обработки того же самого скрипта апачем) работать не хочет.
 
dalex

dalex

Новичок
Регистрация
15.02.2006
Сообщения
17 333
Реакции
49
Баллы
0
Когда тестирует сам - да, и потому все работает. А как целевой аудитории дает с других машин залезть - так облом.
Он сам тестирует с командной строки, скармливая скрипт в php.exe
А через апач не работает, скорее всего потому что либо в апаче скрипт выполняет модуль, который что-то не может, что может php.exe, либо они берут разные конфиги, либо у них разные переменные окружения.
 
G

ga MAD

Активный участник
Регистрация
27.02.2007
Сообщения
5 185
Реакции
179
Баллы
63
Я понимаю, что он выполняется на сервере, а не в браузере. Мне и надо чтобы он выполнялся на сервере и перехватывал сессию программы на том же самом сервере. Проблема в том, что в командной строке (минуя апач) все это безобразие прекрасно работает, а при выполнении того же скрипта в браузере (после обработки того же самого скрипта апачем) работать не хочет.
Понял. Но причина по сути та же - когда ты его из командной строки запускаешь, ты его запускаешь от своего имени, и whoami дает тебя.
"Через браузер" Apache запускает скрипт от своего имени (рут наверное, х.з.), и whoami возвращает имя апача.
 
OP
Grannas

Grannas

Участник
Регистрация
27.02.2011
Сообщения
1 830
Реакции
10
Баллы
38
"Через браузер" Apache запускает скрипт от своего имени (рут наверное, х.з.), и whoami возвращает имя апача.
Апач запускает скрипт не от своего имени, а от имени того, от кого он запущен. В моем случае апач запущен от того же пользователя, что и php, что и это приложение. Я менял это в настройках сервиса. На том, где все это крутиться MS Windows Server 2012, кстати.Доступ к ней у меня через rdp.
 
vOFF4eG

vOFF4eG

LPD: Агат
Регистрация
26.01.2009
Сообщения
8 439
Реакции
39
Баллы
0
Жжете ребят!!!
 
DAE

DAE

Moderator
Регистрация
11.07.2007
Сообщения
27 197
Реакции
71
Баллы
48
В error.log сообщение нечитаемое ибо не настроена локаль, а лог пишется в cp1251.
первый шаг к успеху: настроить читаемость лога.
без этого это все гадание на кофейной гуще.
 
B

basilios

Guest
пхп могет не залогиненного пользователя пускать как какого-нибудь анонимоуса?
(мож иис с аспнетом и виндовой аутентификацией? вернее запуском с правами указанного юзера)
 
DAE

DAE

Moderator
Регистрация
11.07.2007
Сообщения
27 197
Реакции
71
Баллы
48
Как бы 500я ошибка это в 99% случаев что то действительно глубокое.
Если не хватает прав - пхп валидно умирает с ошибкой, а не кладет апач в 500.

2х минутный гугл выдал ссылки:
http://stackoverflow.com/questions/4016470/php-apache-crash-when-php-call-com-objects
http://stackoverflow.com/questions/10221786/use-com-objects-in-php-with-apache

так что настраивать логи и читать)
 
DAE

DAE

Moderator
Регистрация
11.07.2007
Сообщения
27 197
Реакции
71
Баллы
48
Если прям совсем лень разбираться - могу предложить костыльное решение проблемы:
делаешь php скрипт который делает
Код:
echo exec("php твойволшебныйскрипт.php");
Но вообще это все крайне странно)

PS с запуском php под виндой вообще, и с com объектами в частности никогда не работал, пишу на основе общей логики
 
OP
Grannas

Grannas

Участник
Регистрация
27.02.2011
Сообщения
1 830
Реакции
10
Баллы
38
Как бы 500я ошибка это в 99% случаев что то действительно глубокое.
Если не хватает прав - пхп валидно умирает с ошибкой, а не кладет апач в 500.

2х минутный гугл выдал ссылки:
http://stackoverflow.com/questions/4016470/php-apache-crash-when-php-call-com-objects
http://stackoverflow.com/questions/10221786/use-com-objects-in-php-with-apache

так что настраивать логи и читать)

Читал и то и другое. Оба случая не мои. Почти уверен, что в тексте ошибки в error.log написано, что он не может подцепиться к сессии, так как указывает именно на строчку
PHP:
$session = new COM( "Lotus.NotesSession" );
Точно такая же ошибка выдается при закрытой программе и выполнении скрипта в командной строке. Прочитать ее текст смог предварительно выполнив cmd /k chcp 1251, сменил в консоле кодировку на win1251.
 
Верх Низ