Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка в файле 
:(
    Опции темы
alligator
  Дата 28.1.2004, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



$id=$_GET['id'];
$ip=getenv("REMOTE_ADDR");
$dd="$ip#$id"."\n";
$ids=fopen("id.dat","a+");
fwrite($ids, "$dd");
Народ помогите пожалуйста 3 день с проверкой маюсь =(( thumbs-up.gif
Вопрос вот в чем мне нужно сделать проверку на существование данных в файле ($ip и $id)
что функция сначала проверяла данные а потом записывала в файл но если будет повторный запрос с такого ip и с таким же id тогда уже не записывалось в файл ничего как сделать ааа confused.gif??
Помогите очень нужно !!!
PM MAIL   Вверх
Skywalker
Дата 28.1.2004, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 17.11.2003
Где: Днепропетровск, У краина

Репутация: нет
Всего: 2



смотри функцию fseek().
Вообще еще можно так: построчно считываешь файл и в каждой строке смотришь не находиться ли ip & id внутри.
Код

int strpos ( string haystack, string needle [, int offset])
Returns the numeric position of the first occurrence of needle in the haystack string. Unlike the strrpos(), this function can take a full string as the needle parameter and the entire string will be used.



--------------------
"Мы в ответе за тех, кого приручили" Антуан де Сент Экзюпери, Маленький принц
PM MAIL WWW ICQ   Вверх
Skywalker
Дата 28.1.2004, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 17.11.2003
Где: Днепропетровск, У краина

Репутация: нет
Всего: 2



тебе алгоритм поподробнее рассказать? или написать код?


--------------------
"Мы в ответе за тех, кого приручили" Антуан де Сент Экзюпери, Маленький принц
PM MAIL WWW ICQ   Вверх
Baster
Дата 28.1.2004, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.1.2004

Репутация: нет
Всего: 1



fseek - имхо не есть гут !
просто открой файл блин file(); и потом просто in_array !
PM MAIL   Вверх
MuToGeN
Дата 28.1.2004, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



1) вместо fwrite($ids, "$dd") лучше fwrite($ids, $dd)
2) Baster, это легче, но то, что лучше - не факт.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
alligator
Дата 28.1.2004, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Это все хорошо конечно но я с ПхП работаю можно сказать токо 4 дня и хотелбы лучше увидеть пример кода с комментами если можно! confused.gif

Это сообщение отредактировал(а) alligator - 28.1.2004, 20:00
PM MAIL   Вверх
Baster
Дата 28.1.2004, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.1.2004

Репутация: нет
Всего: 1



Код
<?php
$file = "text.txt";
$data = file($file);
if(in_array($ip,$data) {
   print "This IP exists in this file";
} else {
$fp = fopen($file,"a");
fwrite($ip,$fp);
fclose($file);
}

могут быть ошибки smile.gif писал быстро ....
PM MAIL   Вверх
Sardar
Дата 28.1.2004, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Вот чуть побольше, но ИМXО "лучше":
Код

$id=$_GET['id'];
//проверим на прокси
if($ip=getenv("HTTP_CLIENT_IP"));
elseif($ip=getenv("HTTP_X_FORWARDED_FOR"));
elseif($ip=getenv("X_REAL_IP"));
elseif($ip=getenv("HTTP_X_FORWARDED"));
elseif($ip=getenv("HTTP_VIA"));
elseif($ip=getenv("HTTP_X_COMING_FROM"));
elseif($ip=getenv("HTTP_COMING_FROM"));
$ip_addr=getenv("REMOTE_ADDR");
if(empty($ip)) $ip=$ip_addr;
/*
else {
$is_ip = ereg('^([0-9]{1,3}\.){3,3}[0-9]{1,3}', $ip, $regs);
if ($is_ip&&(count($regs)<=0)) {} //поле от прокси есть но лажевое
}
*/
$dd=$ip."#".$id;
do {
//никаких функций file() - в виду параллельности выполнения
if(!($ids=fopen("id.dat","r+"))) {trigger_error("Can't open file",E_USER_WARNING); break;}
@flock($ids,LOCK_EX); //в FAT работать не будет
$cont=fread($ids,filesize("id.dat"));
$cont=explode("\n",$cont);
if(!in_array($dd,$cont)) {
 fseek($ids,0,SEEK_END);
 fwrite($ids, $dd."\n");
 }
//else
fclose($ids);
} while(false);

echo "Done: ".$dd;



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Baster
Дата 28.1.2004, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.1.2004

Репутация: нет
Всего: 1



ну ясен пень лучше smile.gif я просто сделал скелет , алгоритм smile.gif
PM MAIL   Вверх
alligator
Дата 28.1.2004, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Спасибо буду разбираться
PM MAIL   Вверх
alligator
Дата 29.1.2004, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Решил попробовать поставить что попроще для начала
Код

$p=$_GET['p'];
$ip=getenv("REMOTE_ADDR");
$file = "x.dat";
$data = file($file);
$aa =$ip.":".$p."\n";

if(in_array($aa,$data)){ // Бастер сдесь нехватало скобки =))
print "This data exists in this file";
} else {
$fp=fopen($file,"a+");
fputs($aa, $fp); //пишет что ошибка сдесь
fclose($file); // и сдесь
}

Посмотри мож я где намудрил что хотя вроде все верно

Это сообщение отредактировал(а) alligator - 29.1.2004, 01:23
PM MAIL   Вверх
alligator
Дата 29.1.2004, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Так ошибки вроде поправил !выводит что типа уже существует ip но всё равно продолжает писать в файл $Ip.":".$p =((
PM MAIL   Вверх
Sardar
Дата 29.1.2004, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Елы палы...
Читаем: fputs(), fclose()

Я запостил работающий код(для этого специально поднял апача smile.gif), тебе осталось скопировать его как есть и получать результаты. Где непонятно спрашивай(по функциям на www.php.net!). Половина кода это правильное получение IP пользователя, закоментированные участки кода это:
1) предупреждение, что чел. зашел через прокси но с лажевым IP, не понял - игнорируй smile.gif
2) что сделать если IP уже в базе - пока ничего

Ручаюсь что при любой нагрузке скрипт не упадет, знающие люди пусть поправят если что не так.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
alligator
Дата 29.1.2004, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Ошибку с fputs и fclose я поправил!
Что твой скрипт пашет это я уже проверил но мне не нужно определение прокси у меня не человек заходит на сайт а программа передает данные с компа на котором она находиться передает в GET запросе $p=порт открытый ей и $id=уникальный номер проги
все что мне надо чтоб когда она обращаеться при каждом обращении не было дуплей в файле и все и надеюсь что скрипт будет выдерживать большие нагрузки!до примерно 50-70 запросов в сек

Это сообщение отредактировал(а) alligator - 29.1.2004, 01:58
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.