Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.09;
Скачать: CL | DM;

Вниз

PHP из Perl   Найти похожие ветки 

 
kernel ©   (2008-01-30 19:38) [0]

Такая ситуация:
Есть скрипт форума "из перловки" (он же YaBB). Для подтверждения регистрации пользователей требуется активация по почте. Но дело в том, что sendmail и другие "мыльницы" из Перла у моего хостера не работают, но есть отлично работающая функция mail() из PHP. Собстно вопрос: Как я могу запустить PHP скрипт из Perl, а также передать ему нужные переменные?


 
palva ©   (2008-01-30 20:36) [1]

Правило такое: Cтрока в обратных апострофах передается на вход shell. То что возвратит shell вернется в программу perl. Например на Windows можно написать:
print `ping www.mail.ru`;
будет напечатан результат пинга. Дальше нужно спросить админов сервера, какая у них ОС, разрешат ли они так запускать и т. д.


 
kernel ©   (2008-01-30 20:39) [2]

shell не поддерживается :(


 
palva ©   (2008-01-30 20:44) [3]

А кто будет разбирать и передавать в скрипт параметры?


 
БарЛог ©   (2008-01-30 21:32) [4]

А вызвать его, как страничку нельзя? и параметры заодно передать.


 
palva ©   (2008-01-30 22:37) [5]

> А кто будет разбирать и передавать в скрипт параметры?
А-а, понятно. Браузер клиента. Сделайте, как предлагает БарЛог.


 
kernel ©   (2008-01-31 08:06) [6]


> БарЛог ©   (30.01.08 21:32) [4]
>
> А вызвать его, как страничку нельзя? и параметры заодно
> передать.

А как это будет "звучать" на Перле?


 
ketmar ©   (2008-01-31 08:56) [7]

>[6] kernel ©(31.01.08 08:06)
как переход на страницу с нужным урлом, наверное? подточи форму отправки данных о регистрации, дабы она отправляла, например, сначала php-странице, а та, отработав, вызывала дальше ябб. как один из вариантов.


 
kernel ©   (2008-01-31 09:13) [8]


> ketmar ©   (31.01.08 08:56) [7]

Действительно, что-то я сразу об этом не подумал. Сейчас попробую...


 
ketmar ©   (2008-01-31 09:28) [9]

>[8] kernel ©(31.01.08 09:13)
представляю, как народ пальцем у виска крутить будет. я бы сам первый ржал. кто ж сразу сообразит, что у виска провайдеру крутить надо…


 
kernel ©   (2008-01-31 09:43) [10]

Нет, так не получится. Почта используется не только для активации акк-ов: кто-то захочет восстановить пароль, кто-то написать кому-нибудь на почту, кто-то отправить архив ветки форума... и т.д. -- слишком много форм получится :)


 
ketmar ©   (2008-01-31 09:47) [11]

>[10] kernel ©(31.01.08 09:43)
вариант верный: сменить провайдера на адекватного.
вариант неверный: сделать отправку почты ручками при помощи прямого общения по SMTP.
как-нибудь так.


 
kernel ©   (2008-01-31 09:53) [12]


> вариант верный: сменить провайдера на адекватного.

Невозможно. Это единственный минус хостера из-за которого менять его не хочется.

> вариант неверный: сделать отправку почты ручками при помощи
> прямого общения по SMTP.

Невозможно. Уже пробовал :(


 
ketmar ©   (2008-01-31 09:59) [13]

>Невозможно. Уже пробовал :(
быть того не может. если php умеет, то одно из двух: или оно юзает что-то a-la sendmail, или само работает с SMTP.

в любом случае — хостер болен на весь череп, если у него такая альтернативная система. менять, менять, пока не поздно. пока другие косяки не полезли.


 
kernel ©   (2008-01-31 10:44) [14]

Действительно mail() в PHP нормально работает, спрашивал у хостера почему sendmail не работает.. в общем, может я что не так понял (хостер -- англичанен, а у меня с английскип плохо), вот наш разговор:

Я =================================

Hello,

When I use Sendmail I get a error "sendmail: sendmail cannot be called directly from a shell with the current user id Mail sent." can anyone help here please?

Thank you.

ХОСТЕР ============================

Hello,

I have just checked your webmail and didn"t get any errors. Maybe you should check your mailclient and see if the error is there.

Thank you.

Я =================================

#!/usr/bin/perl --

print "Content-type: text/html\n\n";
unless(open (MAIL, "|/usr/sbin/sendmail -t")) {
print "error.\n";
warn "Error starting sendmail: $!";
}
else{
print MAIL "From: мыло\@от_хостера.ru\n";
print MAIL "To: чужое мыло\@хостер.ru\n";
print MAIL "Subject: test subject\n\n";
print MAIL "test mail message";
close(MAIL) || warn "Error closing mail: $!";
print "Mail sent.\n";
}

When I use this source code I get a error "sendmail: sendmail cannot be called directly from a shell with the current user id Mail sent."

Thank you.

ХОСТЕР ============================

Hello,

Shell is not supported on our free hosting. You are trying to use it - taht is why you get this error.

Thank you.

Я =================================

How I can send mail using Perl? Please example.

Thank you.

ХОСТЕР ============================

Shell, CGI and Pearl are not supported on our servers.

Thank you.

Я =================================

Thanks


 
kernel ©   (2008-01-31 10:45) [15]

Забыл все это в теги взять :) Очень не хватает редактирования форуму...


 
palva ©   (2008-01-31 12:10) [16]


> kernel ©   (31.01.08 09:43) [10]
> Нет, так не получится. ... слишком много форм получится :)

Не пойму, какие здесь проблемы. Откуда получается новые формы?
У вас же уже, надеюсь, стоит что-то в ACTION формы. Пусть там стоит "thanks.pl", который принимает параметры отсылает письмо и потом выводит что нибудь клиенту типа "Благодарим за регистрацию". Ну и разделите это на две части. Первую часть с отправкой письма напишите на php, и поставьте в ACTION "thanks.php" А из "thanks.pl" выкиньте все связанное с отправкой. В конце "thanks.php" выдайте клиенту единственную строку - заголовок с переадресацией на "thanks.pl" и никаких новых форм не выдавайте.


 
Style ©   (2008-01-31 12:23) [17]

ну и желательно в thanks.php проверить
что бы
$_SERVER["HTTP_REFERER"] == "thanks.pl" ;)


 
palva ©   (2008-01-31 12:34) [18]

Ну реферер проверить конечно не мешает, а то ваш "thanks.php" заюзает какой-нибудь спаммер. Но боюсь, что одна такая проврка может не сработать.


 
ketmar ©   (2008-01-31 12:38) [19]

>[14] kernel ©(31.01.08 10:44)
>Shell, CGI and Pearl are not supported on our servers.
чо ниясно? %-)
тебе кривым английским сказали, что твои проблемы с CGI их волнуют так же, как демография среди динозавров. тут я тебе не просто посоветую, а настоятельно посоветую сменить хостера. на вменяемого не-free.


 
kernel ©   (2008-01-31 13:22) [20]


> ketmar ©   (31.01.08 12:38) [19]

Это не выход из ситуации.
Теперь про формы: У форума есть полно функций работы с почтой, например: активация, восстановление пароля, посылка сообщения по почте участнику, посылка ветки форума в архиве и мн. др.... При использовании этих функций вызывается специальный скрипт, который читает настройки форума и отсылает что-либо кому-нибудь по почте. Мне нужно как-то подставить в "отсылочный" кусок скрипта вызов PHP скрипта с ф-ей mail(). Пока что смотрю в сторону system() для запуска PHP из Perl.


 
palva ©   (2008-01-31 13:30) [21]

Попробуй сначала сам system. system это то же самое, что и обратные кавычки. Если обратные кавычки не работали, то system тоже не должен.
Нужно искать перловский модуль отправки почты и ставить самому в собственный cgi-bin. Но тоже не факт, что будет работать. Хостер наверняка отключил сетевые возможности у perl.


 
ketmar ©   (2008-01-31 13:34) [22]

>Это не выход из ситуации.
вот то, что ты описываешь — это как раз и не выход, а ректальный доступ. выход — сменить хостера на вменяемого. стоит копейки.


 
umbra ©   (2008-01-31 14:16) [23]

если операционка - *никс, то можно штатным консольным клиентом отослать письмо из перла. Но оно будет в текстовом формате
`echo -ne "текст рисьма\n\x4" | mail -s "Activation" newuser@his.mail`


 
ketmar ©   (2008-01-31 14:20) [24]

нельзя. сказали же выше, что шела не дают.


 
umbra ©   (2008-01-31 14:36) [25]

неужели и модулей перловых доставить невозможно? место ж какое-то выделено.


 
wicked ©   (2008-01-31 14:49) [26]

судя по разговору с суппортом, хостинг бесплатный
поэтому нужно либо купить у них нормальный платный хостинг, либо поискать другой платный


 
Style ©   (2008-01-31 14:53) [27]


> > вариант неверный: сделать отправку почты ручками при помощи
> > прямого общения по SMTP.
>
> Невозможно. Уже пробовал :(


А что не получилось с SMTP? Авторизоваться не удалось или чего? Или вообще в перле не получилось сокет создать?
Через чей почтарь пытался посылать? В принципе можно посылать и с другого сервера письмо. А MAIL FROM ставить нужный адрес.


 
БарЛог ©   (2008-01-31 15:32) [28]

> Shell, CGI and Pearl are not supported on our servers.
А как же ты тогда запускаешь скрипты??


 
Style ©   (2008-01-31 15:58) [29]


> А как же ты тогда запускаешь скрипты??


скрипты как я понял запускаются. только shell не доступен


 
kernel ©   (2008-01-31 16:37) [30]


> Style ©   (31.01.08 14:53) [27]

Пробовал SMTP с авторизацией (использовал модуль Net::SMTP) - вообще не работал. Кстати, MIME::Lite отправлял почту, но почему-то только на мыло, которое создано у этого же хостера.

> БарЛог ©   (31.01.08 15:32) [28]

Сам удивился, когда мне так сказали :)


 
БарЛог ©   (2008-01-31 16:39) [31]

> Сам удивился, когда мне так сказали :)

А хостинг, случайно, не Народ? :)


 
kernel ©   (2008-01-31 16:43) [32]

Хостинг случайно вполне нормальный, только это его единственная беда :)


 
_xxx_   (2008-01-31 17:17) [33]

kernel, еще вариант - скидывать из перла в отдельную папку/файл -> делать редирект на скрипт пхп (без каких либо параметров) -> этот скрипт читает  папку и ищет файлы -> читает из файла текст и адрес -> отправляет письмо -> после отправки удаляет файл.


 
БарЛог ©   (2008-01-31 18:24) [34]

> делать редирект на скрипт пхп (без каких либо параметров)

> читает из файла текст и адрес -> отправляет письмо -> после отправки удаляет файл

А если его одновременно вызовет 100 человек?


 
palva ©   (2008-01-31 18:32) [35]

> А если его одновременно вызовет 100 человек?
Завести 100 файлов. Уж если автор собирается делать регистрацию и отслеживать авторизованный вход, то у него наверно реализованы сеансы. Пусть имя файла будет содержать идентификатор сеанса. У него же готовый перловский текст. Пусть посмотрит, как там это сделано.


 
БарЛог ©   (2008-01-31 18:48) [36]

> Завести 100 файлов

Коряво как-то, имхо


 
kernel ©   (2008-01-31 20:07) [37]


> palva ©   (31.01.08 18:32) [35]

Мне же нужно будет передать из Perl в PHP скрипт как-то имя этого файла (если файл будет каждый раз разный)?!


 
kernel ©   (2008-01-31 20:10) [38]

Смотрите что я нашел: http://search.cpan.org/~rsod/IPC-Run-0.80/lib/IPC/Run.pm
:)
Может быть это поможет?


 
kernel ©   (2008-01-31 21:27) [39]

Сейчас смотрю в сторону http://perltraining.com.au/tips/2006-02-07.html


 
Style ©   (2008-02-01 10:15) [40]


>
> Пробовал SMTP с авторизацией (использовал модуль Net::SMTP)
> - вообще не работал. Кстати, MIME::Lite отправлял почту,
>  но почему-то только на мыло, которое создано у этого же
> хостера.


Я имел ввиду попробовать поработать с SMTP самому через

use IO::Socket::INET;

my $sock = IO::Socket::INET->new(PeerAddr => localhost:smtp(25));

причем не обязательно отправлять письмо через почтарь хостера .
можно завести ящичек где нить на mail.ru и отправлять письмо через него.



Страницы: 1 2 вся ветка

Текущий архив: 2008.03.09;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.019 c
15-1201870682
oxffff
2008-02-01 15:58
2008.03.09
A million licenses of RAD Studio for Russia


2-1202575224
Master_Of_Puppets
2008-02-09 19:40
2008.03.09
Снова о TreeView. Проблемы с корнем.


15-1202128056
nikfel
2008-02-04 15:27
2008.03.09
Что вы думаете о программе


2-1202971041
Stepper
2008-02-14 09:37
2008.03.09
Руссификация Ресурсов из Delphi 2007 - есть ли сие?


2-1202681835
Бэтман
2008-02-11 01:17
2008.03.09
Дата