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

  Все выпуски  

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


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

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

Выпуск № 417
от 02.08.2006, 16:05

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


Вопрос № 50392: Здравствуйте. Как с помошью PHP прочитать хедеры другого сайта? Заранее благодарю....
Вопрос № 50455: Добрый день! Как можно реализовать на сайте такую вещь: когда пользователь заходит за логином и паролем то он есть в списке on-line а когда выходит нет. Извените если вопрос уже задавался! Заранее спасибо....
Вопрос № 50457: Уважаемые эксперты! Подскажите пожалуйста способ хранения данных. Делаю аукцион. Есть начальная цена (но это не важно). Пользователь заходит и пишет свою цену. Заходит следующий пользователь, перебивает цену. Вот именно ВСЕ эт...

Вопрос № 50.392
Здравствуйте.
Как с помошью PHP прочитать хедеры другого сайта?
Заранее благодарю.
Отправлен: 27.07.2006, 22:14
Вопрос задал: Beka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Physicist
Здравствуйте, Beka!

Я так понимаю, что под хедерами сайта понимается ответ на запрос HEAD. Если так - см. Пример 2 по адресу http://ru.php.net/manual/ru/ref.sockets.php
Ответ отправил: Physicist (статус: 9-ый класс)
Ответ отправлен: 27.07.2006, 22:36
Оценка за ответ: 5

Отвечает: Saw
Здравствуйте, Beka!

header`ы можно вытащить так (пример из мануала к php5):

<?php
$url = 'http://www.example.com/redirecting_page.php';

$fp = fopen($url, 'r');

/* Для PHP 4.3.0 используйте $http_response_header
вместо stream_get_meta_data() */
foreach(stream_get_meta_data($fp) as $response) {
/* Были ли мы перенаправлены, с помощью header`а
"Location: " ? */
if (substr(strtolower($response), 0, 10) == 'location: ') {
/* обновим $url */
$url = substr($response, 10);
}
}
?>
Удачи!
Ответ отправил: Saw (статус: 2-ой класс)
Ответ отправлен: 28.07.2006, 08:40


Вопрос № 50.455
Добрый день! Как можно реализовать на сайте такую вещь: когда пользователь заходит за логином и паролем то он есть в списке on-line а когда выходит нет. Извените если вопрос уже задавался! Заранее спасибо.
Отправлен: 28.07.2006, 14:46
Вопрос задал: Грицай Алексей Юрьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, Грицай Алексей Юрьевич!

Создайте файл onlineusers.txt, в котором будут храниться имена online пользователей. В функции Login (не знаю, как она у Вас называется) считываете этот файл в массив, проверяете, есть ли там такой элемент и, если нет - добавляете его. Соответственно, в Logout - удаляете его если он там есть.

Приложение:

Ответ отправил: Physicist (статус: 9-ый класс)
Ответ отправлен: 28.07.2006, 15:02
Оценка за ответ: 4

Отвечает: Saw
Здравствуйте, Грицай Алексей Юрьевич!
Можно например так:
Будем использовать сессии. Сделать базу где будет храниться идентификатор сессии и врема последней активности юзера, когда юзер заходит, стратуем сессию, и записываем ее идентификатор в базу и время входа, действия пользователся на сайте должны сопровождаться обновлением в базе времени его последней активности. А чтобы пользователь исчезал со временем из on-line необходимо проверять текущее время и время его последней активности, если разница во времени превосходит необходимый предел, то пользователя не следует считать on-line`овым. На случай если пользователь сам захочет выйти нужно просто уничтожить его сессию. Тут можно еще предложить несколько вариантов насчет выхода пользователя из on-line: можно просто удалять запись из базы, а можно при следующем его входе просто запись обновлять.
Удачи! ;)
Ответ отправил: Saw (статус: 2-ой класс)
Ответ отправлен: 28.07.2006, 15:07

Отвечает: Jeka911
Здравствуйте, Грицай Алексей Юрьевич!

Ведем таблицу: active: user, logdate.

При заходе пользователя выполняем следующие запросы:

1. DELETE * FROM active WHERE (DATE_ADD(`logdate`,INTERVAL '10' MINUTE))<NOW();
2. INSERT INTO active (user,logdate) VALUES ('$username',NOW());
3. SELECT * FROM active;
4. $n = mysql_num_rows(mysql_query($zapros3));
$n = количество пользователей онлайн.
Надеюсь понятно.
П.С. Если посетителей мало, первый запрос можно выполнять при каждом просмотре страницы, ну и естественно, при logout пользователя.

---------
Шахтер - чемпион!!!
Ответ отправил: Jeka911 (статус: 7-ой класс)
Ответ отправлен: 28.07.2006, 20:56


Вопрос № 50.457
Уважаемые эксперты!
Подскажите пожалуйста способ хранения данных.
Делаю аукцион.
Есть начальная цена (но это не важно).
Пользователь заходит и пишет свою цену.
Заходит следующий пользователь, перебивает цену.
Вот именно ВСЕ эти цены необходимо записывать куда-то, при чем желательно в одно место (одну ячейку строки лота) в виде Петя-500,Вася-1000 и т.д.
У меня была идея работы с массивом, но как угадать, какого размера должен быть массив? Или есть возможность автоувеличения массива?
Если вы меня поняли, то посоветуйте что-нибудь. )))
Спасибо.
Отправлен: 28.07.2006, 15:38
Вопрос задал: Andrey Star (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Madproger
Здравствуйте, Andrey Star!

МОжешь хранить и в массиве. Если ты пишешь в РНР то размер массива тебя никак не должен волоновать, в РНР размер автоматически увеличивается. Т.е.

Т.е.
1) $some_arr[] = array("name"=>"Vasya", "amount"=>500);
2) $some_arr[] = array("name"=>"oleg", "amount"=>1000);

Если у тебя имена гарантированно разные можешь сделать так
1) $some_arr["Vasya"] = 500;
2) $some_arr["Oleg"] = 1000;

Тогда проще будет делать сортировку
---------
И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 8-ой класс)
Ответ отправлен: 28.07.2006, 15:47

Отвечает: Physicist
Здравствуйте, Andrey Star!

А в php у массивов размер не фиксирован (и вообще массив в php - это не совсем то, что понимается под массивом в большинстве языков программирования). Поэтому добавлять новые элементы ($arr[]=$newvalue) можно до бесконечности.
А реализация может быть любая - от текстовых файлов (каждая строка - цена и иня клиента) до базы данных (аналогично плюс id аукциона).
Ответ отправил: Physicist (статус: 9-ый класс)
Ответ отправлен: 28.07.2006, 15:52

Отвечает: Saw
Здравствуйте, Andrey Star!

Я так понял используется БД, тогда можно поступить так (помоему оптимальный вариант):
1) создать таблицу с лотами (Уникальный номер-Лот + еще какие надо поля)
2) создать таблицу с пользователями (Ун. номер пользователя-Имя пользователя-Цена-Номер лота)
Таким образом устанавливаем связь му двумя этими таблицами. Т.е. надо найти макс. цену лота №1, выдираем из таблицы пользователей все записи с "Номер лота" = 1, и находим поле с макс. ценой, из него же выдираем имя пользователяего Ун. номер.

Удачи! ;)
Ответ отправил: Saw (статус: 2-ой класс)
Ответ отправлен: 28.07.2006, 15:56

Отвечает: PVS
Здравствуйте, Andrey Star!
Массив в PHP сам увеличивается по мере добавляния в него записей.
Ответ отправил: PVS (статус: Студент)
Ответ отправлен: 28.07.2006, 16:05

Отвечает: Jeka911
Здравствуйте, Andrey Star!

Если необходимо хранить ставки в базе, массивы здесь не помогут.
Вариант: Ячейка типа TEXT, а ставки записывать в нее: "ставка1%ставка2%ставка3%".
Разбивать на массив: explode("%",$lots['bids']);
А добавлять ставки:
INSERT INTO lots('id',...,'bids')
VALUES
(' ' ,..., ' ". $lots['bids']."%".$newbid." ');
Но все же оптимальней вариант с дополнительной таблицей, описанный Saw'ом.
---------
Шахтер - чемпион!!!
Ответ отправил: Jeka911 (статус: 7-ой класс)
Ответ отправлен: 28.07.2006, 20:46

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, Andrey Star!
Как описал Saw, данные лучше хранить в БД. Но есть ряд моментов:
1. Таблица лотов вида - НомерЛота (уникальный), Описание и т.д.
2. Как понимаю, пользователи должны регистрироваться. Если так то заводим еще таблицу пользователей - НомерПользователя, ДанныеПользователя.
3. Заводим таблицу отношений - НомерЛота, НомерПользователя, Ставка.

---------
Хорошие программы как птенцы - их нужно долго высиживать на яйцах
Ответ отправил: Козлов Алексей Сергеевич (статус: 2-ой класс)
Ответ отправлен: 28.07.2006, 23:18


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное