Пишу интересный скрипт. Нужна помощь.

Discussion in 'PHP' started by Linuxoid, 21 May 2007.

  1. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Значит воть... Пишу крайне интересный и, что главное, полезный скрипт. Что именно он делает - озвучу через пару дней, а то сразу кто нить идею сопрет... :rolleyes:

    Короче проблемы такие... :)

    1. Проферка ИПов.
    Есть файл ip.txt. В нем записано:
    Code:
    127.0.0.1
    127.0.0.2
    127.0.0.3
    127.0.0.4
    Как реализовать проверку, содержится ли ИП человека, который ломица на сайт в списке? Понимаю, что это очень просто, но сам понять не могу...

    PHP:
    if(ip есть в списке){
    echo(
    "Бобруйск прямо по коредору.");
    } else {
    echo(
    "Всегда рады вашему визиту!");
    };
    Кто поможет - буду благодарен. Повторюсь - просьба не орать "Ламер! Тут все просто!".

    2. Проверка файла на сайте.
    Имеем сайт. Пусть будет http://ya.ru/. У него в корне лежит файл preved.html (http://ya.ru/preved.html). Как сделать, чтобы мой пхп скрипт
    а) проверял наличие данного файла.
    б) сравнивал его с эталонным (тоесть чтоб содержимое html кода 1 в 1 было с файлом, по которому сверяет скрипт.)
    По пункту б у меня, честно говоря, идея была только одна: сравнивать контрольные суммы MD5. Но для этого надо получить файл както... Да и если сайтов 1000+, то скачивание и проверка всех файлов стает несколько неудобной...

    Ну пока все. Есть еще пара вопросов, но с ними еще сам поковыряюсь (не люблю неразобравшись сразу орать "не работает")...


    Помогите кто нить пожалуйста! ;)
     
  2. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,215
    Reputations:
    704
    function get_user_ip()
    {$strRemoteIP=$_SERVER['REMOTE_ADDR'];}
    Получил ip, теперь записал его в лог, как вариант в бд. Потом сравниваешь каждого зашедшего с базой. Если (..) то (..) иначе (..)
     
  3. hackconnect

    hackconnect Elder - Старейшина

    Joined:
    8 Mar 2007
    Messages:
    49
    Likes Received:
    5
    Reputations:
    0
    запиши в какуюнить переменную то что вернет file('ip.txt'); и шпарь по циклу проверку на соответствие. про trim() не забудь, а то все проверки вернут false.

    Alexsize
    что за бредовая функция? память не экономим
    PHP:
    function get_client_ip()
    {
       return (empty(@
    getenv('HTTP_X_FORWARDED_FOR')) ? getenv('REMOTE_ADDR') : getenv('HTTP_X_FORWARDED_FOR');
    }
     
    #3 hackconnect, 21 May 2007
    Last edited: 21 May 2007
  4. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Эмммм... Товарищи... Я наверное тупой, но у меня все сделано так:
    PHP:
    <?php
    $ip 
    $_SERVER['REMOTE_ADDR'];
    $entry_line "$ip\n";
    $fp fopen("ip.txt","a");
    fputs($fp$entry_line);
    fclose($fp);
    ?>
    С этим все нормально...
    Вы мне полностью пример приведите как это проверять? :) А то я чет недогоню... :)

    А по 2 пункту вообще некаких идей чтоли? :) Он для меня сейчас главный... :) С 1 пунктом всетаки проще...
     
    #4 Linuxoid, 21 May 2007
    Last edited: 21 May 2007
  5. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    PHP:
    <?php

    $ips 
    file('ip.txt');
    foreach(
    $ips as $ip){
        if(
    $ip == $_SERVER['REMOTE_ADDR']){
            
    // v bobruysk
        
    }
    }

    ?>
    PHP:
    <?php
    $f 
    fopen('ip.txt''r');
    while(!
    feof($f)){
        if(
    rtrim(fgets($f)) == $_SERVER['REMOTE_ADDR']){
            
    //v bobruysk
        
    }
    }
    ?>
    PHP:
    <?php
    $ips 
    file('ip.txt');
    if(
    array_search($_SERVER['REMOTE_ADDR'], $ips)){
        
    //v bobruysk
    }
    ?>
    выберай что нравится ..

    PHP:
    <?php
    $md5 
    md5_file('url.php');
    if(
    md5_file('url.php') == $md5){
        echo 
    'ok';
    }
    ?>
    это если локальный файл..
     
    1 person likes this.
  6. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    GreenBear
    Огромное спасибо!!! :) Я примерно так и догадывался... ;) Но чтот сам сформулировать не смог реализацию...
     
  7. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    всегда пожалуста ..
     
    2 people like this.
  8. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Ну короче еще по хранению инфы в файле вопрос...

    Файл users.txt
    Code:
    pupkin|ya.ru|pupkin@mail.ru|lamer
    root|linux.org.ru|root@ya.ru|admin
    dialsoft|dialsoft.info|root@dialsoft.info|coder
    И имеем скрипт:
    PHP:
    ...открываем файл users.txtчитаем все в массив (сепаратор |, все идет в переменную $u[])

    if(
    $u[1] == "ya.ru"){
    УДАЛЯЕМ СТРОЧКУ ИЗ ФАЙЛА};
    Вот как это реализовать я вообще непойму... :) Ну, чтобы строка определенная удалялась всмысли.
    Извините если сильно туплю... :)
     
  9. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    ну так же сделай через foreach по строкам..
    PHP:
    <?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);

    ?>
     
  10. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Еще есть дело... :)

    Сравнение контрольной суммы файла на удаленном сервере с эталонным локальным файлом
    PHP:
    <?php 
    $md5 
    md5_file('http://example.ru/2.exe'); 
    if(
    md5_file('2.exe') == $md5){ 
        echo 
    'Ok'
    } else {
    echo 
    'Fufel';
    };
    ?>
    Вот как сделать, что если файл не найден (любой, хоть локальный, хоть удаленный), то чтоб выводилось "Not found", а не мат пхп на тему отсутствия файла? :)
     
  11. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    if (file_exists(путь к файлу)) {

    тут операции с твоим фалйом

    } else {
    echo "Not found";
    }
     
  12. j0ze

    j0ze New Member

    Joined:
    6 Oct 2006
    Messages:
    7
    Likes Received:
    1
    Reputations:
    0
    PHP:
    <?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($hosturl80$errno$errstr10)) {
             
    fwrite($socket$query);
             
    //while (!feof($socket)) $result .= fgets($socket);   //-- FULL
             
    $result fgets($socket);
             
    fclose($socket);
            }
         return 
    $result;
        }

    ?>
     
    #12 j0ze, 22 May 2007
    Last edited: 22 May 2007
  13. andy13

    andy13 Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    100
    Likes Received:
    15
    Reputations:
    3
    локально так:
    Code:
    <?
    if ($str=@md5_file('file.txt'))
    echo $str;
    else
    echo "not find!";
    ?>
     
  14. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    А это не одно и тоже как и пхп?))))))

    Точнее создать файл 404 ошибки и сделать редирект
     
  15. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    А если локальный файл отсутствует? :) КОторый в md5_file("2.exe")...
     
    #15 Linuxoid, 22 May 2007
    Last edited: 22 May 2007
  16. j0ze

    j0ze New Member

    Joined:
    6 Oct 2006
    Messages:
    7
    Likes Received:
    1
    Reputations:
    0
    если отсутствует то будет ехит..

    if (!is_file($file)) die('local file not found');
    if (md5_file($file) == $md5) echo 'Ok'; else echo 'Fufel';
     
    #16 j0ze, 22 May 2007
    Last edited: 22 May 2007
  17. siw

    siw Member

    Joined:
    7 May 2007
    Messages:
    22
    Likes Received:
    10
    Reputations:
    0
    PHP:
    <?
    if (
    $str=md5_file('file.txt'))
    {
    echo 
    $str;
    }
    else
    {
    $link="index.php";
    header("Location: $link");
    }
    ?>
    Так еще можно сделать. В случае неудачи у юзера загрузится index.php
     
  18. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    а по моему апач можно как-то настроить на вывод ошибок
     
  19. mR_LiNK[deface_0nl

    mR_LiNK[deface_0nl Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    147
    Likes Received:
    27
    Reputations:
    13
    _http://programming.su/apache/article/15/
    будет полезно
    Code:
    # Настройка вывода сообщений о Ошибках (стиль 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 
    # Примечание - значения переменных, ассоциированных с первоначальным запросом, 
    # в этом случае НЕ будут доступны
    НО для большого проекта все навсего нун класс.. или отдельный модуль обработки и вывода ошибок

    зы: пора бы уже хотя бы в конфах апача разбираться
     
    #19 mR_LiNK[deface_0nl, 22 May 2007
    Last edited: 22 May 2007
    1 person likes this.
  20. censored!

    censored! Green member

    Joined:
    2 Nov 2004
    Messages:
    1,159
    Likes Received:
    299
    Reputations:
    156
    Переименуйте тему:
    в
    =)
     
    _________________________