Просмотр полной версии : Пишу интересный скрипт. Нужна помощь.
Linuxoid
21.05.2007, 09:05
Значит воть... Пишу крайне интересный и, что главное, полезный скрипт. Что именно он делает - озвучу через пару дней, а то сразу кто нить идею сопрет... :rolleyes:
Короче проблемы такие... :)
1. Проферка ИПов.
Есть файл ip.txt. В нем записано:
127.0.0.1
127.0.0.2
127.0.0.3
127.0.0.4
Как реализовать проверку, содержится ли ИП человека, который ломица на сайт в списке? Понимаю, что это очень просто, но сам понять не могу...
if(ip есть в списке){
echo("Бобруйск прямо по коредору.");
} else {
echo("Всегда рады вашему визиту!");
};
Кто поможет - буду благодарен. Повторюсь - просьба не орать "Ламер! Тут все просто!".
2. Проверка файла на сайте.
Имеем сайт. Пусть будет http://ya.ru/. У него в корне лежит файл preved.html (http://ya.ru/preved.html). Как сделать, чтобы мой пхп скрипт
а) проверял наличие данного файла.
б) сравнивал его с эталонным (тоесть чтоб содержимое html кода 1 в 1 было с файлом, по которому сверяет скрипт.)
По пункту б у меня, честно говоря, идея была только одна: сравнивать контрольные суммы MD5. Но для этого надо получить файл както... Да и если сайтов 1000+, то скачивание и проверка всех файлов стает несколько неудобной...
Ну пока все. Есть еще пара вопросов, но с ними еще сам поковыряюсь (не люблю неразобравшись сразу орать "не работает")...
Помогите кто нить пожалуйста! ;)
Alexsize
21.05.2007, 09:19
function get_user_ip()
{$strRemoteIP=$_SERVER['REMOTE_ADDR'];}
Получил ip, теперь записал его в лог, как вариант в бд. Потом сравниваешь каждого зашедшего с базой. Если (..) то (..) иначе (..)
hackconnect
21.05.2007, 09:39
запиши в какуюнить переменную то что вернет file('ip.txt'); и шпарь по циклу проверку на соответствие. про trim() не забудь, а то все проверки вернут false.
Alexsize
что за бредовая функция? память не экономим
function get_client_ip()
{
return (empty(@getenv('HTTP_X_FORWARDED_FOR')) ? getenv('REMOTE_ADDR') : getenv('HTTP_X_FORWARDED_FOR');
}
Linuxoid
21.05.2007, 10:11
Эмммм... Товарищи... Я наверное тупой, но у меня все сделано так:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$entry_line = "$ip\n";
$fp = fopen("ip.txt","a");
fputs($fp, $entry_line);
fclose($fp);
?>
С этим все нормально...
Вы мне полностью пример приведите как это проверять? :) А то я чет недогоню... :)
А по 2 пункту вообще некаких идей чтоли? :) Он для меня сейчас главный... :) С 1 пунктом всетаки проще...
GreenBear
21.05.2007, 10:21
Как реализовать проверку, содержится ли ИП человека, который ломица на сайт в списке? Понимаю, что это очень просто, но сам понять не могу...
<?php
$ips = file('ip.txt');
foreach($ips as $ip){
if($ip == $_SERVER['REMOTE_ADDR']){
// v bobruysk
}
}
?>
<?php
$f = fopen('ip.txt', 'r');
while(!feof($f)){
if(rtrim(fgets($f)) == $_SERVER['REMOTE_ADDR']){
//v bobruysk
}
}
?>
<?php
$ips = file('ip.txt');
if(array_search($_SERVER['REMOTE_ADDR'], $ips)){
//v bobruysk
}
?>
выберай что нравится ..
2. Проверка файла на сайте.
<?php
$md5 = md5_file('url.php');
if(md5_file('url.php') == $md5){
echo 'ok';
}
?>
это если локальный файл..
Linuxoid
21.05.2007, 10:29
GreenBear
Огромное спасибо!!! :) Я примерно так и догадывался... ;) Но чтот сам сформулировать не смог реализацию...
GreenBear
21.05.2007, 10:45
всегда пожалуста ..
Linuxoid
21.05.2007, 10:54
Ну короче еще по хранению инфы в файле вопрос...
Файл users.txt
pupkin|ya.ru|pupkin@mail.ru|lamer
root|linux.org.ru|root@ya.ru|admin
dialsoft|dialsoft.info|root@dialsoft.info|coder
И имеем скрипт:
...открываем файл users.txt, читаем все в массив (сепаратор |, все идет в переменную $u[])
if($u[1] == "ya.ru"){
УДАЛЯЕМ СТРОЧКУ ИЗ ФАЙЛА};
Вот как это реализовать я вообще непойму... :) Ну, чтобы строка определенная удалялась всмысли.
Извините если сильно туплю... :)
GreenBear
21.05.2007, 11:08
ну так же сделай через foreach по строкам..
<?php
$users = file('users.txt');
$f = fopen('users.txt', 'w'); fclose($f);
$f = fopen('users.txt' ,'a');
foreach($users as $user){
//tut razbey
if($u[1] != 'ya.ru'){
fwrite($f, $user."\n");
}
}
fclose($f);
?>
Linuxoid
22.05.2007, 04:32
Еще есть дело... :)
Сравнение контрольной суммы файла на удаленном сервере с эталонным локальным файлом
<?php
$md5 = md5_file('http://example.ru/2.exe');
if(md5_file('2.exe') == $md5){
echo 'Ok';
} else {
echo 'Fufel';
};
?>
Вот как сделать, что если файл не найден (любой, хоть локальный, хоть удаленный), то чтоб выводилось "Not found", а не мат пхп на тему отсутствия файла? :)
blackybr
22.05.2007, 07:57
if (file_exists(путь к файлу)) {
тут операции с твоим фалйом
} else {
echo "Not found";
}
<?php
error_reporting(0);
$file = '2.exe';
$url = 'example.ru';
$dir = '/';
if (ereg("(404)", Get_contints($url, $dir.$file))) die('remote file not found');
$md5 = md5_file('http://'.$url.$dir.$file);
if (!is_file($file)) die('local file not found');
if (md5_file($file) == $md5) echo 'Ok'; else echo 'Fufel';
function Get_contints($hosturl, $dir) {
$query = 'GET '.$dir.' HTTP/1.1'."\r\n".
'Host: '.$hosturl."\r\n".
'User-Agent: Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)'."\r\n".
'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'."\r\n".
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'."\r\n".
'Keep-Alive: 300'."\r\n".
'Connection: close'."\r\n".
'Cache-Control: max-age=0'."\r\n\r\n";
if ($socket=fsockopen($hosturl, 80, $errno, $errstr, 10)) {
fwrite($socket, $query);
//while (!feof($socket)) $result .= fgets($socket); //-- FULL
$result = fgets($socket);
fclose($socket);
}
return $result;
}
?>
чтоб выводилось "Not found", а не мат пхп на тему отсутствия файла
локально так:
<?
if ($str=@md5_file('file.txt'))
echo $str;
else
echo "not find!";
?>
локально так:
<?
if ($str=@md5_file('file.txt'))
echo $str;
else
echo "not find!";
?>
А это не одно и тоже как и пхп?))))))
Точнее создать файл 404 ошибки и сделать редирект
Linuxoid
22.05.2007, 10:11
А если локальный файл отсутствует? :) КОторый в md5_file("2.exe")...
если отсутствует то будет ехит..
if (!is_file($file)) die('local file not found');
if (md5_file($file) == $md5) echo 'Ok'; else echo 'Fufel';
<?
if ($str=md5_file('file.txt'))
{
echo $str;
}
else
{
$link="index.php";
header("Location: $link");
}
?>
Так еще можно сделать. В случае неудачи у юзера загрузится index.php
а по моему апач можно как-то настроить на вывод ошибок
mR_LiNK[deface_0nl
22.05.2007, 20:46
а по моему апач можно как-то настроить на вывод ошибок
_http://programming.su/apache/article/15/
будет полезно
# Настройка вывода сообщений о Ошибках (стиль Apache)
#
#
# 1 - текст
# ErrorDocument 500 "Серверу пришел крандец
# Единственный символ " в начале строки просто обозначает начало текста, он не выводится
#
# 2 - Локальный редирект
#ErrorDocument 404 /missing.html
# редирект на локальный URL /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
#
# Вы можете перенаправлять на скрипт или страницу, использующие SSI
# 3 - Редирект на другие сервера
#ErrorDocument 402 http://some.other_server.com/subscription_info.html
# Примечание - значения переменных, ассоциированных с первоначальным запросом,
# в этом случае НЕ будут доступны
НО для большого проекта все навсего нун класс.. или отдельный модуль обработки и вывода ошибок
зы: пора бы уже хотя бы в конфах апача разбираться
censored!
23.05.2007, 17:18
Переименуйте тему:
Пишу интересный скрипт. Нужна помощь.
в
С GreenBear, j0ze и siw пишем интересный скрипт. Нужна помощь.
=)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot