Вопрос № 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;
Отвечает: 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 (статус: 4-ый класс)
Ответ отправлен: 22.06.2007, 19:07
Вопрос № 92.494
Здрасьте граждане программеры. У меня несколько вопросов. Наверное их стоило поместить как разные вопросы, но я их поместил в один:
1) Я делаю опрос на своём сайте. Сам делаю, не по каким то там готовым скриптам, с нуля. Так вот, проблема возникает при чтении файла.
В любом случае, даже если файл пустой (т.е. голосов ноль),то переменная $diza имеет значение 1. Почему? И как это исправить? Можно конечно просто при инициализации этой переменной присвоить ей значение -1, а не 0, но хотелось бы знать почему скрипт работате неправильно. (пока я именно просто присвоил переменной значение -1).
Подозреваю что из-за конструкции switch ()
[код чтения из файла у меня в приложении. в файле каждая заметка о новом голосе расположена с новой строки]
2)Я на многих сайтах почтовых спонсоров видел такую фичу. Что новсти расположены как бы в меленьком, не знаю фрейме, не знаю нет, но получается что то вроде бегущей снизу вверх строки. Как это реализуется? У меня нет базы данных и новости расположены просто в файле. Дайте плиз ссылочку на бесплатный подобный скрипт, или обьясните плиз словестно как именно это можно реализовать. У меня просто даже мыслей нет как такое сделать можно.
Отвечает: 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/. В севом столбце как раз что то вроде бегущей строки.Правда там реклама. Буду вам очень признателен, если вы подскажите как такое реализовать, скинув ответ мне в личку или на минифорум.