проверка дублей перед записью в файл

Тема в разделе "PHP", создана пользователем ufaclub, 13 янв 2011.

Модераторы: latteo
  1. ufaclub

    ufaclub

    Регистр.:
    1 май 2007
    Сообщения:
    395
    Симпатии:
    17
    PHP:
    <?php
    $thispage 
    $_SERVER['REQUEST_URI'];
    $page_hash md5($thispage);
    $lines file('a.txt',FILE_SKIP_EMPTY_LINES);
    $urls file('url.txt',FILE_SKIP_EMPTY_LINES);
    $key array_search($page_hash$urlstrue); // $key = 1;
    if (!$key){
        
    $w=fopen('url.txt','a-'); // открываем только для записи, курсор устанавливаем в конец файла
        
    fwrite($w,$page_hash."\r\n"); // записываем хэш новой страницы в конец файла
        
    fclose($w);
        
    $new_urls file('url.txt',FILE_SKIP_EMPTY_LINES); // заново читаем файл в массив
        
    $key count($new_urls)-1// считаем количество элементов в массиве и отнимаем 1, т.к. ключи элементов начинаются с 0
    }
    echo 
    $lines[$key];
    ?> 
    пишет кеш в файл без проверки на дубль-- как сделать чтоб проверял?
    тоесть если есть такой кеш то выводить строку ответствующию номеру строки существующего кеша?

    подсказали как реализовать
     
  2. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    чуток другое решение
    PHP:
    $thispage $_SERVER['REQUEST_URI'];
    $page_hash md5($thispage);
    if(!
    file_exists('cache/'.$page_hash.'.txt')){
        echo 
    $mywebsite;//выводишь сайт
        
    $out ob_get_contents();
        
    $handle fopen('cache/'.$page_hash.'.txt','w');
        
    fwrite($handle,$out);
        
    fclose($handle);
    }else{
        print 
    file_get_contents('cache/'.$page_hash.'.txt');
    }
     
    ufaclub нравится это.
  3. ufaclub

    ufaclub

    Регистр.:
    1 май 2007
    Сообщения:
    395
    Симпатии:
    17

    хм....непонял.....как оно цельно будет работать? тут ж нет даже моих двух файлов? откуда браться будут ссылки что лежать в a.txt
     
  4. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    Сорри, не правильно понял сначала))
    PHP:
    <?php
    $thispage 
    $_SERVER['REQUEST_URI'];
    $page_hash md5($thispage);
    $lines file('a.txt',FILE_SKIP_EMPTY_LINES);
    $urls file('url.txt',FILE_SKIP_EMPTY_LINES);
    $key array_search($page_hash$urlstrue); // $key = 1;
    if (!$key){
        if(
    in_array($page_hash,$urls)){
            for(
    $i=0;$i<count($urls);$i++){
                if(
    $urls[$i] == $page_hash){
                    
    $key $i;
                    break;
                }
            }
        }else{
            
    $w=fopen('url.txt','a-'); // открываем только для записи, курсор устанавливаем в конец файла
            
    fwrite($w,$page_hash."\r\n"); // записываем хэш новой страницы в конец файла
            
    fclose($w);
            
    $new_urls file('url.txt',FILE_SKIP_EMPTY_LINES); // заново читаем файл в массив
            
    $key count($new_urls)-1// считаем количество элементов в массиве и отнимаем 1, т.к. ключи элементов начинаются с 0    
        
    }
    }
    echo 
    $lines[$key];
    ?> 
    + in_array()
     
    ufaclub нравится это.
  5. ufaclub

    ufaclub

    Регистр.:
    1 май 2007
    Сообщения:
    395
    Симпатии:
    17

    PHP:
    все равно запись дублей идет 

    6666cd76f96956469e7be39d750cc7d9
    aed0c99b3ab80f1e8df3af59cf0ae53a
    aed0c99b3ab80f1e8df3af59cf0ae53a
    aed0c99b3ab80f1e8df3af59cf0ae53a
    6007c2c2e02715cac9d8a365152bac27
    05cc7ef32005e67e8959bb4c3cd05702
    aed0c99b3ab80f1e8df3af59cf0ae53a
    aed0c99b3ab80f1e8df3af59cf0ae53a
    aed0c99b3ab80f1e8df3af59cf0ae53a


     
  6. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    попробовал в результате получается что если массив создается через функцию file() то эта конструкция не работает а если массив задается через array то все нормально работает незнаю почему может еще кто подскажет
    PHP:
    <?php 
    $page_hash 
    '6666cd76f96956469e7be39d750cc7d9'
    $lines file('a.txt'); 
    $urls file('url.txt',FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
    //print_r($urls); 
    //$urls=array('6666cd76f96956469e7be39d750cc7d9','aed0c99b3ab80f1e8df3af59cf0ae53a','6007c2c2e02715cac9d8a365152bac27','05cc7ef32005e67e8959bb4c3cd05702');
    //print_r($urls);
    if(in_array($page_hash,$urls)){
            for(
    $i=0;$i<count($urls);$i++){ 
                if(
    $urls[$i] == $page_hash){
                       
    $key $i
                    break; 
                } 
            } 
        }else{ 
            
    $w=fopen('url.txt','a-'); // открываем только для записи, курсор устанавливаем в конец файла 
            
    fwrite($w,$page_hash."\r\n"); // записываем хэш новой страницы в конец файла 
            
    fclose($w); 
            
    $new_urls file('url.txt',FILE_SKIP_EMPTY_LINES); // заново читаем файл в массив 
            
    $key count($new_urls)-1// считаем количество элементов в массиве и отнимаем 1, т.к. ключи элементов начинаются с 0     
        

    echo 
    $lines[$key]; 
    ?>
     
  7. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    тогда можно использывать explode();

    PHP:
    $file file_get_contents('urls.txt');
    $lines explode("\n",$file);
    //проверка на пустоту
    for($i=0;$i<count($lines);$i++){
    if(
    $lines[$i] == '') unset($lines[$i]);
    }