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

ufaclub

Полезный
Регистрация
1 Май 2007
Сообщения
395
Реакции
19
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, $urls, true); // $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];
?>
пишет кеш в файл без проверки на дубль-- как сделать чтоб проверял?
тоесть если есть такой кеш то выводить строку ответствующию номеру строки существующего кеша?

подсказали как реализовать
считываешь файл в массив, потом функцией in_array() проверяешь, есть он или нет, и если нет, то записываешь
 
чуток другое решение
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');
}
 
чуток другое решение
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');
}


хм....непонял.....как оно цельно будет работать? тут ж нет даже моих двух файлов? откуда браться будут ссылки что лежать в a.txt
 
Сорри, не правильно понял сначала))
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, $urls, true); // $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()
 
Сорри, не правильно понял сначала))
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, $urls, true); // $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()


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

6666cd76f96956469e7be39d750cc7d9
aed0c99b3ab80f1e8df3af59cf0ae53a
aed0c99b3ab80f1e8df3af59cf0ae53a
aed0c99b3ab80f1e8df3af59cf0ae53a
6007c2c2e02715cac9d8a365152bac27
05cc7ef32005e67e8959bb4c3cd05702
aed0c99b3ab80f1e8df3af59cf0ae53a
aed0c99b3ab80f1e8df3af59cf0ae53a
aed0c99b3ab80f1e8df3af59cf0ae53a
 
попробовал в результате получается что если массив создается через функцию 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]; 
?>
 
тогда можно использывать 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]);
}
 
Назад
Сверху