![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
BlackRu |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 431 Регистрация: 14.9.2009 Репутация: нет Всего: 4 |
Доброго дня. Изучаю код для отправки почты через сокеты.
Не могу понять, зачем в функции цикл. Так ли он необходим? Правильно ли я понимаю, что цикл тут нужен для ожидания ответа сервера? Т.е. на случай, если сервер ответит не сразу. Я задал тот же вопрос на том сайте, где нашел статью, два дня прошло, ответов нет. Интересно, как работет fget. Изначальный код из статьи приведен ниже. Могу ли я сделать так? Т.е. без цикла.
Изначальный код из статьи:
Извиняюсь за количество кода, могу сократить после ответа. (Для практических целей использую Sendmail, понять хочу для себя(в учебных целях). Это сообщение отредактировал(а) BlackRu - 8.7.2014, 13:05 -------------------- Удалена администрацией форума |
||||
|
|||||
polls |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.7.2014 Репутация: -1 Всего: -1 |
прошлое десятилетие,
отправляй почту через gmail из php http://stackoverflow.com/questions/712392/...9-send-mail-php в сутки с одного gmail акка можно отправить 500 писем, если ограничение не изменилось. Это сообщение отредактировал(а) polls - 8.7.2014, 11:02 |
|||
|
||||
krundetz |
|
||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
BlackRu, цикл так как:
1. ответ может иметь разную длину, а в коде есть ограничение в 515 символов (очень странное кстати) 2. ответ может состоять из нескольких строк, а fgets работает пока не достигнут конец строки как работает fgets можно почитать на php.net человек же ясно сказал
это смешная цифра. Вы не представляете себе объемы коммерческой корреспонденции. Только писем по одному вопросу с одним клиентом может быть десятки, а иногда и сотни в день. Вопросов может быть несколько да и в нормальной организации клиентов не один два, а еще не стоит забывать про сотрудников. Про отправку заказов с магазинов говорить? polls, вам минус: 1. за некомпетентность, к вашему сведению для отправки почты GMAIL использует туже самую технологию, которую пытается понять BlackRu и которую вы называете прошлым десятилетием 2. за ответ не по теме, BlackRu четко и ясно выразился для чего он задает этот вопрос 3. безапеляционность, BlackRu что у него отправка работает и через что. 4. за неправильную вставку ссылок, если уж настаиваете на своем решение, а слово "отправляй" я по другому расценить не могу, и приводите ссылки на материалы, то потрудитесь их вставить так чтобы человек смог ими воспользоваться. 5. общая невнимательность. Все в совокупности дало минус. Если бы вы сформулировали свой ответ по другому. Например:
в таком случае я бы списал ваш ответ просто на невнимательное изучение сообщения ТС и минуса бы не поставил. Это сообщение отредактировал(а) krundetz - 8.7.2014, 16:58 |
||||
|
|||||
_zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 6 Всего: 12 |
Так то оно так, но там нужно 3 первых символа - поэтому особого смысла в цикле нет. И да, можно заюзать fread вместо fgets, но здесь все равно без разницы. И цикл там все равно не правильный. Что будет если встретится стока состоящая из одного символа "0" ? Это сообщение отредактировал(а) _zorn_ - 9.7.2014, 05:18 |
|||
|
||||
krundetz |
|
||||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
вот пример обмена сообщениями
а теперь вопрос, как быть если нужно узнать SIZE? Там не цикл неправильный, а функция извлечения кода ответа, а если быть точнее то ошибка в проектирование, которая будет мешать расширяемости в дальнейшем. Я сделал хотя бы так:
так как могут понадобиться и другие данные из ответа. Не совсем понял имеется в виду нуль символ или строка из нуля? ИМХО, программист который создавал код, взятый за основу BlackRu, либо не до конца понимает что он делает и на чем, либо делал времянку для чего то. Вот поэтому и код такой же. Это сообщение отредактировал(а) krundetz - 9.7.2014, 10:55 |
||||||
|
|||||||
_zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 6 Всего: 12 |
||||
|
||||
krundetz |
|
||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
_zorn_, нет, ваш вариант:
1. не обработает ситуацию когда в ответ возвращаются неправильные данные 2. не имеет смысла, так как fgets() всегда возвращает строку Если надо обработать правильность входящих данных, то как то так:
Не совсем уверен, что правильно будут обработаны несколько строк. Надо еще подумать. Или можно пойти дальше извлекая только данные соответствующие шаблону:
P.S. Данный код совсем не оптимален приведен как отправная точка для дальнейших размышлений. Это сообщение отредактировал(а) krundetz - 11.7.2014, 11:14 |
||||
|
|||||
BlackRu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 431 Регистрация: 14.9.2009 Репутация: нет Всего: 4 |
Спасибо,
krundetz, _zorn_ Уже не ожидал ответа, поэтому пропал. Ага, этот 4 (получается по счету) символ - пробел, по которому происходит выход из цикла, может оказаться в ответе сервера и не пробелом. Если я не ошибаюсь. Это сообщение отредактировал(а) BlackRu - 10.7.2014, 23:16 -------------------- Удалена администрацией форума |
|||
|
||||
_zorn_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 6 Всего: 12 |
Вы забываете одну "приятную" особенность ПХП - динамические типы данных.
http://ideone.com/8svgZ2 |
||||
|
|||||
BlackRu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 431 Регистрация: 14.9.2009 Репутация: нет Всего: 4 |
Т.е. суммируя вышесказанное, если я правильно понимаю:
Интересно, какова вероятность, что код ответа будет не вначале, а где-нибудь в середине или конце строки? Т.е., получается, получив строку ответа, желательно проверить наличие в ней трехзначного кода? Если данные неправильные (по каким-то причинам), то следует повторить последний запрос? Это сообщение отредактировал(а) BlackRu - 11.7.2014, 09:00 -------------------- Удалена администрацией форума |
|||
|
||||
krundetz |
|
||||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Да, желательно получать весь ответ сервера, который может состоять из нескольких строк. И только после этого с ним работать. Да, необходимо найти код ответа сервера который должен стоять в начале каждой строки. От него и переданных на сервер данных будет зависеть дальнейшее поведение программы.
Да.
Вероятность должна стремиться к 0, но это не значит, что входящие данные не нужно проверять на корректность. Так как по идее имея собственный "почтовый сервер" с которым ваша программа будет общаться можно вести исследование на проникновение, на ваш сервер.
Нет. Если ответ сервера не предусмотрен сценарием работы программы, то повтор запроса бессмыслен, следует просто прекратить обработку отправки этого письма на этот сервер и записать информацию об этом в лог. |
||||||
|
|||||||
krundetz |
|
||||||||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
да вы правы, не учел. ![]()
Понял несколько моментов который меня смущали. 1. В моём коде нет проверки на начало строки поэтому такая строка:
тоже подпадет под него. Хотя на нее надо выводить ошибку. 2. Также нет проверки на то что между строками ответа может затесаться неправильная строка, вот так например:
Это сообщение отредактировал(а) krundetz - 11.7.2014, 11:11 |
||||||||||
|
|||||||||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
немного допилил getData()
http://ideone.com/Phqy1b Это сообщение отредактировал(а) krundetz - 11.7.2014, 12:43 |
|||
|
||||
BlackRu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 431 Регистрация: 14.9.2009 Репутация: нет Всего: 4 |
krundetz, спасибо огромное за подробные ответы и пример кода. Начинаю вникать.
Это сообщение отредактировал(а) BlackRu - 11.7.2014, 14:41 -------------------- Удалена администрацией форума |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |