Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 698
от 28.06.2007, 01:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 423, Экспертов: 53
В номере:Вопросов: 3, Ответов: 10


Вопрос № 92479: Добрый день! Записи файла состоят из полей. Разделитель полей - 1E Разделитель записей - 1E1D В дальнейшем база данных будет пополнятся данными из файла. При построчном считывании функция fgets() выдает весь файл, а мне необхо...
Вопрос № 92481: Здравствуйте Ув. эксперты! Подскажите, как при отправке письма скриптом на РНР сделать запрос на подтверждение прочтения? Заранее благодарен всем откликнувшимся....
Вопрос № 92494: Здрасьте граждане программеры. У меня несколько вопросов. Наверное их стоило поместить как разные вопросы, но я их поместил в один: 1) Я делаю опрос на своём сайте. Сам делаю, не по каким то там готовым скриптам, с нуля. Так вот, проблема во...

Вопрос № 92.479
Добрый день!
Записи файла состоят из полей.
Разделитель полей - 1E
Разделитель записей - 1E1D
В дальнейшем база данных будет пополнятся данными из файла.
При построчном считывании функция fgets() выдает весь файл,
а мне необходимо выделить запись, а потом поля.
Вопрос: Как правильно считать запись в переменную $order.
Спасибо за ответ.

Приложение:

Отправлен: 22.06.2007, 14:04
Вопрос задал: Eliz (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: BerdArt
Здравствуйте, Eliz!
Могу посоветовать каждую запись помещать в файл в одну строку. Следующая запись будет на следующей строке. Таким образом, $order=fgets($fp); будет считывать одну строку (т.е. одну запись) из файла.
Ответ отправил: BerdArt (статус: 2-ой класс)
Ответ отправлен: 22.06.2007, 14:20
Оценка за ответ: 3

Отвечает: Lain
Здравствуйте, Eliz!
Вопервых запсиь должна быть каждая с новой строчки уже хотя бы потому что в нем проще будет разобраться если вдруг чего переглючит или сервер будет в дауне а данные из этого файла в срочняк понадобятся, а если еще в качестве разделителя полей сделать табуляцию то такой файл можно будет без проблем открывать и править в том же excel'е
Функция file() разбивает файл на строчки и кладет их в массив, дальше (foreach) каждую строчку разбиваем на поля функцией explode() в результате имеем всю таблицу в двухмерном массиве
---------
Будьте мужественны - худшее впереди!
Ответ отправил: Lain (статус: 2-ой класс)
Ответ отправлен: 22.06.2007, 15:53
Оценка за ответ: 3

Отвечает: PVS
Здравствуйте, Eliz!
$file_by_lines=file("file.txt"); //Прочитать все строчки из файла
$file_single_text=implode("",$file_by_lines); //Склеить строки; разделитель - пустая строка
$field_separator=chr(0x1E);
$record_separator=chr(0x1E).chr(0x1D); //Формируем разделители записей и полей (я предполагаю, что 1e1d - шестнадцатеричные коди или просто должно быть $record_separator='1E1D' ?)
$record_arr=explode($record_separator, $file_single_text); //Разбиваем на записи
foreach ($record_arr as $record_str){
$order=explode($field_separator,$record_str); //Разбиваем запись на поля

//Здесь Вы вероятно что-то будете делать с $order

};

Вроде всё. Может я что-то не так понял насчёт разделителей - подправте, но алгоритм остаётся тот же.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 22.06.2007, 18:20
Оценка за ответ: 5

Отвечает: Sea
Здравствуйте, Eliz!
Вариантов достаточно много, но так как вы не сказали ничего о размере файла, то будем считать, что он не сильно большой.
Тогда можно так:
<?php
$fieldSeparator = '1E';
$orderSeparator = '1E1D';
$data = implode('', file("file.txt")); // можно использовать file_get_contents("file.txt")
$orders = explode($orderSeparator, $data);

foreach($orders as $order)
{
$fields = explode($fieldSeparator, $order);
}
?>

Если же файл всетаки большой и вам надо поток обрабатывать, то так и спросите :)
Ответ отправил: Sea (статус: 4-ый класс)
Ответ отправлен: 22.06.2007, 18:38
Оценка за ответ: 5

Отвечает: HookEst
Здравствуйте, Eliz!
Вот, например, функция fgetd($fp,$delim,[$bufSize]) считывает и возвращает из файла строку до $delim и устанавливает указатель файла на следующий символ после $delim. Если $delim не найден - возвращает false.
function fgetd(&$rFile, $sDelim, $iBuffer=1024) {
$sRecord = '';
while(!feof($rFile)) {
$sRecord .= fread($rFile, $iBuffer);
$iPos = strpos($sRecord, $sDelim);
if ($iPos !== false) {
fseek($rFile, 0-strlen($sRecord)+$iPos+strlen($sDelim), SEEK_CUR);
return substr($sRecord, 0, $iPos);
}
}
return false;
}

//установите свои разделители
$recdelim="1E1D";
$fielddelim="1E";

$f=fopen('file.txt','rb') or die('File not found!');
$n=1;

while(($rec=fgetd($f,$recdelim))!==false){
echo 'record:'.$n++;
print_r(explode($fielddelim,$rec));
}
fclose($f);

Успехов.
Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 25.06.2007, 07:47
Оценка за ответ: 5


Вопрос № 92.481
Здравствуйте Ув. эксперты!

Подскажите, как при отправке письма скриптом на РНР сделать запрос на подтверждение прочтения?

Заранее благодарен всем откликнувшимся.
Отправлен: 22.06.2007, 14:05
Вопрос задал: Топорков Алексей Иванович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: BerdArt
Здравствуйте, Топорков Алексей Иванович!
Точно не знаю, но по - моему можно запросить у человека, читающего ваше письмо, подтверждение о прочтении, дописав в заголовок письма следующую строчку:
"X-Disposition-Notification-To: <you@youdomain.com> "
Ответ отправил: BerdArt (статус: 2-ой класс)
Ответ отправлен: 22.06.2007, 14:46

Отвечает: Денис Сергеевич
Здравствуйте, Топорков Алексей Иванович!

Дополню ответ BerdArt ссылкой. Более подробно о заголовках, связанных с запросом уведомления о получении, можно прочесть здесь: http://lattice.itep.ru/old/UNIX/RFC/rfc2298.html
Ответ отправил: Денис Сергеевич (статус: 5-ый класс)
Ответ отправлен: 22.06.2007, 15:18

Отвечает: Sea
Здравствуйте, Топорков Алексей Иванович!
Попробуйте так:
<?php
$to = 'admin@microsoft.com';
$from = 'Bill@microsoft.com';
$subject = 'Hello!';
$message = 'How are you?';

$headers = "From: " . $from . " ";
$headers.= "Disposition-Notification-To: " . $from . " ";

mail($to, $subject, $message, $headers);
?>

Только это не гарантирует что вы получите подтверждение прочтения, а только есть такая возможность.
Ответ отправил: Sea (статус: 4-ый класс)
Ответ отправлен: 22.06.2007, 19:07


Вопрос № 92.494
Здрасьте граждане программеры. У меня несколько вопросов. Наверное их стоило поместить как разные вопросы, но я их поместил в один:

1) Я делаю опрос на своём сайте. Сам делаю, не по каким то там готовым скриптам, с нуля. Так вот, проблема возникает при чтении файла.
В любом случае, даже если файл пустой (т.е. голосов ноль),то переменная $diza имеет значение 1. Почему? И как это исправить? Можно конечно просто при инициализации этой переменной присвоить ей значение -1, а не 0, но хотелось бы знать почему скрипт работате неправильно. (пока я именно просто присвоил переменной значение -1).
Подозреваю что из-за конструкции switch ()
[код чтения из файла у меня в приложении. в файле каждая заметка о новом голосе расположена с новой строки]
2)Я на многих сайтах почтовых спонсоров видел такую фичу. Что новсти расположены как бы в меленьком, не знаю фрейме, не знаю нет, но получается что то вроде бегущей снизу вверх строки. Как это реализуется? У меня нет базы данных и новости расположены просто в файле. Дайте плиз ссылочку на бесплатный подобный скрипт, или обьясните плиз словестно как именно это можно реализовать. У меня просто даже мыслей нет как такое сделать можно.

Приложение:

Отправлен: 22.06.2007, 15:15
Вопрос задал: Стас Тельнов/[анти]КИЛЛЕР (статус: 3-ий класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: PVS
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!
1)В первых трёх строках Вы заносите одну запись. Вероятно она Вам и светится сразу же.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 22.06.2007, 18:00
Оценка за ответ: 3
Комментарий оценки:
этого быть не может, т.к. переменные инициализируются уже после этих самых первых строк.

Отвечает: Sea
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!
Попробуйте изменить блок switch на:
switch ($vybor)
{
case 'diza': $diza++; break;
case 'usab':$usab++; break;
case 'kont':$kont++; break;
case 'prav':$prav++; break;
case 'serv':$serv++; break;
}

А на счет второй части вопроса, так вы бы хоть ссылку дали. А то по вашему описанию это может быть все что угодно.
Если там действительно бегущая строка, так вам это в JavaScript надо, а база данных вам тут ни чем не поможет.
Ответ отправил: Sea (статус: 4-ый класс)
Ответ отправлен: 22.06.2007, 19:07
Оценка за ответ: 4
Комментарий оценки:
1) Я так пробовал...Всё безуспешно. Это не помогает(((

2) Вот например тут: http://wmearn.com/. В севом столбце как раз что то вроде бегущей строки.Правда там реклама. Буду вам очень признателен, если вы подскажите как такое реализовать, скинув ответ мне в личку или на минифорум.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное