Учтите, что для предложенных вами методов должен быть allow_url_fopen = On. Как альтернатива - выше по обсуждению тыщу раз обсуждался вопрос получения содержимого файла через сокеты.
Ах да! PHP: <?php $fp = fsockopen("ultracomp.ru", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET /prices/ULTRA_Msk_All_Txt.txt HTTP/1.1\r\n"; $out .= "Host: www.ultracomp.ru\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { $f .= fgets($fp, 128); } fclose($fp); } $f = explode("\r\n\r\n",$f); $f[0] = null; $f = implode($f); echo "File:<br>$f"; ?>
Как сделать перекодировку к аплоудеру, что бы русские файлы транслитом перестраховывались в английские?
skivig, http://use-google.narod.ru/ Скрипт переводит русский текст в транслит (предоставлен Дрыгой Андреем ([email protected])). /*Дрыга - это фамилия аффтара, а не моя */ PHP: <?php // функция превода текста с кириллицы в траскрипт function encodestring($st) { // Сначала заменяем "односимвольные" фонемы. $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_", "abvgdeeziyklmnoprstufh'iei"); $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_", "ABVGDEEZIYKLMNOPRSTUFH'IEI"); // Затем - "многосимвольные". $st=strtr($st, array( "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya", "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA", "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye" ) ); // Возвращаем результат. return $st; } echo encodestring('Превед медвед'); ?>
Задача: Юзер авторизируется на сайте, в бд, в его записи online = 1. А вот если юзер закрывает окно с сайтом или нажимает на ссылку Exit , то online = 0. Если со ссылкой все более менее понятно, то как реализовать выход по закрытию браузера используя пхп ?
Meanor, online должна быть сессионной переменной, она сама уничтожится по истичении времени сессии (читай - после x минут отсутствия какой-либо активности юзера на сайте)
Да, это все решает, но... Мне, например, надо вывести список юзеров онлайн. Это можно сделать лишь через бд, выводя имена тех, у кого online = 1. Но как сделать этот параметр зависимым от соответствующего параметра сессии? PS. Еще один вопрос по поводу бана по ип. Чаще всего у юзера динамический айпи, а значит, что при каждом заходе в сеть, он меняется... Следовательно просто сравнивать прошлый айпи юзера с теперяшним ничего не даст... Как делается бан в таком случае?
По поводу первого - тема много раз обсуждалась на различных форумах о веб-программировании, поищи примеры либо используй готовую реализацию. По поводу второго - бань по IP+Cookies, либо всю подсеть
Спасиб, вся соль была в функции session_id(), которая мне была неизвестна =(... Мне когда-то говорили, что если запрос к бд стоит в цикле (например в for ), то эт не правильно и скрипт нужно переделывать... Настолько ли это критично?
ИМХО писать time() вместо 0,1 потом SELECT COUNT(*) FROM `users` WHERE `online` < time()+60*5 Так ты выведеш всех юзверей которые открывали сайт в течении 5 минут
По поводу юзеров онлайн - мой вариант. Писал по памяти, мб немного криво или где-то ошибся, нет возможности потестить. Писал на сессиях. 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 );
Да, именно так я и сделал... Но потом увидел, что можно сэкономить кучу байтов, просто используя функцию time в бд в столбце online. Потом запрашивать: PHP: $timep = $time - 60 * 10; db_query("SELECT * FROM `users` WHERE `online` > $timep;") Спасибо Пончику =)
Meanor, не забывай на каждой странице писать в online новый time() потомучто как я понял, он у тебя пишется только при входе, поэтому будет показывать только число юзверей залогинившехся в течении 10 минут, а не обновивших сайт в течении 10 минут. Ну ты мну я думаю понял
PHP: $co = file_get_contents($url); //получаем содержимое $res1 = strpos($co,"не найдено"); Вопрос: функция strpos() будет искать до первого вхождения или пробежит весь файл? Можно ли организовать более быстрый поиск?
челы в общем надо чтобы скрипт пахал постоянно пока не закончт так сказать начатое я ставлю ему ignore_user_abort(1); @set_time_limit(0); но серавно на некоторых серваках он работает но потом вылетает с эрором о конфигурации сервера как заставить работать его постоянно чтобы не случилось -- или это из-за конфига php??