Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [php] Новичкам: задаем вопросы (https://forum.antichat.xyz/showthread.php?t=40896)

groundhog 16.09.2007 18:56

Meanor, по моим меркам - это весьма критично...

Ponchik 16.09.2007 22:43

Цитата:

Сообщение от Meanor
Задача:
Юзер авторизируется на сайте, в бд, в его записи online = 1. А вот если юзер закрывает окно с сайтом или нажимает на ссылку Exit , то online = 0. Если со ссылкой все более менее понятно, то как реализовать выход по закрытию браузера используя пхп ?

ИМХО писать time() вместо 0,1 потом SELECT COUNT(*) FROM `users` WHERE `online` < time()+60*5
Так ты выведеш всех юзверей которые открывали сайт в течении 5 минут

n1†R0x 16.09.2007 23:43

По поводу юзеров онлайн - мой вариант.

Писал по памяти, мб немного криво или где-то ошибся, нет возможности потестить. Писал на сессиях.

Mod:
PHP код:

<?php
session_start
();
$id_sess session_id();
$interv "5";

include 
"config.php"//db conf

$res mysql_query("SELECT * FROM `sessions` WHERE `id_sess` = '$id_sess'");
if (!
$res) exit ("Bad MySQL Struct!");
if (
mysql_num_rows($res) > 0)
{
    
$result mysql_query("UPDATE `sessions` SET `up_date` = NOW(), user = '".$_SESSION['user']."' WHERE `id_sess` = '$id_sess'");
}
else
{
    
$result mysql_query("INSERT INTO `sessions` VALUES ('$id_sess', NOW(), '".$_SESSION['user']."'");
    if (!
$result)
    exit (
"Error! Cannot add user!");
}
$result mysql_query("DELETE FROM `sessions` WHERE `up_date` < NOW() - INTERVAL '$interv' MINUTE");
?>

SQL:
PHP код:

CREATE TABLE `sessions` (
    `
id_sess`     tinytext NOT NULL,
    `
up_date`    datetime NOT NULL default '0000-00-00 00:00:00',
    `
user`         tinytext NOT NULL
    
); 


Meanor 17.09.2007 00:02

Да, именно так я и сделал... Но потом увидел, что можно сэкономить кучу байтов, просто используя функцию time в бд в столбце online.
Потом запрашивать:
PHP код:

 $timep $time 60 10;
 
db_query("SELECT * FROM `users` WHERE `online` > $timep;"

Спасибо Пончику =)

Ponchik 17.09.2007 12:23

Meanor, не забывай на каждой странице писать в online новый time() потомучто как я понял, он у тебя пишется только при входе, поэтому будет показывать только число юзверей залогинившехся в течении 10 минут, а не обновивших сайт в течении 10 минут. Ну ты мну я думаю понял

Darkweider 17.09.2007 22:56

PHP код:

$co file_get_contents($url); //получаем содержимое
$res1 strpos($co,"не найдено"); 

Вопрос: функция strpos() будет искать до первого вхождения или пробежит весь файл? Можно ли организовать более быстрый поиск?

n1†R0x 17.09.2007 23:29

Цитата:

Сообщение от Darkweider
PHP код:

$co file_get_contents($url); //получаем содержимое
$res1 strpos($co,"не найдено"); 

Вопрос: функция strpos() будет искать до первого вхождения или пробежит весь файл? Можно ли организовать более быстрый поиск?

куда уж быстрее
php.net не рулит нынче?

http://ru.php.net/manual/ru/function.strpos.php
Цитата:

strpos -- Возвращает позицию первого вхождения подстроки

genom-- 19.09.2007 20:55

челы в общем надо чтобы скрипт пахал постоянно пока не закончт так сказать начатое
я ставлю ему
ignore_user_abort(1);
@set_time_limit(0);

но серавно на некоторых серваках он работает но потом вылетает с эрором о конфигурации сервера

как заставить работать его постоянно чтобы не случилось -- или это из-за конфига php??

Y.Dmitriy 19.09.2007 21:06

@set_time_limit(0); просто укажи большое время... у мну работало...

Piflit 19.09.2007 21:12

Цитата:

Сообщение от Y.Dmitriy
@set_time_limit(0); просто укажи большое время... у мну работало...

там же @ стоит. значит ошибка из-за ignore_user_abort(1); или нет?


Время: 01:18