Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.042 c
15-1201787088
saNat
2008-01-31 16:44
2008.03.09
Подскажите, пожалуйста, м... компонент для отображения формул


15-1202066029
Неважно
2008-02-03 22:13
2008.03.09
Альтернатива GSM-модему


2-1203002402
webpauk
2008-02-14 18:20
2008.03.09
Handle


4-1184547973
AlexanderMS
2007-07-16 05:06
2008.03.09
Рисование с изменённой палитрой.


15-1201770344
SkyN
2008-01-31 12:05
2008.03.09
Бесплатным аналог VTune для Delphi7?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский