1 переменная, два файла, помогите с php

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

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

    ufaclub

    Регистр.:
    1 май 2007
    Сообщения:
    394
    Симпатии:
    17
    скрипт будет стоять на каждой странице кучи
    сайтов, цель выводить ссылку из файла , в зависимости от урл страницы

    логика :


    1. Определяем урл текущей страницы , вроде через ($ _ S E R V E R [ ' R E Q U E S T _ U R I ' ]), затем записываем его в файл url.txt


    1.1 доп условия , записывать каждый урл в новую строчку , и перед записью проверять, есть ли в файле уже этот урл , если есть но не записывать его.

    2. Работа скрипта.


    2.1 Определяем урл странички , и смотрим какой строчкой идет этот урл в файле url.txt, допустим 2й строчкой, то берем и выводим 2 строчку из файла a.txt вот собственно и все, кто может помогите состряпать скрипт)
     
  2. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Алгоритм таков:

    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); // записываем хэш новой страницы в конец файла
        
    fclose($w);
        
    $new_urls file('url.txt',FILE_SKIP_EMPTY_LINES); // заново читаем файл в массив
        
    $key count($new_urls)-1// считаем количество элементов в массиве и отнимаем 1, т.к. ключи элементов начинаются с 0
    }
    echo 
    $lines[$key];


    ?>
     
    ufaclub нравится это.
  3. ufaclub

    ufaclub

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

    хм чего то не записывает ...

    я закинул эти два тхт файла туда же где лежит индекс php
    все правильно ли сделал?

    хм такс.. стоп.. на денвере работает счас разберусь... спасибо большое за помощ....
     
  4. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Чтобы записывало, права на файл url.txt выставьте 777 (иногда 770 достаточно - зависит от настроек сервера). Под виндой в денвере работает потому что винда не учитывает права на файлы.

    PS: для "спасибо" есть кнопка ;)
     
  5. ufaclub

    ufaclub

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

    хм если запускать просто как файл - то работает

    а если код скопировать в index.php любого шаблона Joomla 1.5 то неработает ( почему?




    ---------- Post added at 18:03 ---------- Previous post was at 16:58 ----------

    проблема в том что он хеш в 1 строчку пишет(

    Добавлено через 37 минут
    PHP:
    fwrite($w,$page_hash."\r\n");
    теперь пишит через строчку -все как и должно быть.

    но он неучитывает что кеш этой страницы уже есть( и создает такой же и выводит новую строчку

    как сделать чтоб он учитывал что есть такой уже кеш и не создавал новую запись а всеголиш выводил строчку соттсветсвуюшию номера строчки кеша?
     
  6. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Используй тогда полный путь а не относительный:

    Там где 'a.txt' пропиши
    PHP:
    $_SERVER['DOCUMENT_ROOT'].'/a.txt'
    (может быть надо без слеша - не помню точно, от системы зависит)
    И также с url.txt сделай

    Если не учитывает уже имеющуюся строчку, попробуй так:

    PHP:
    $key array_search($page_hash."\r\n"$urlstrue);
     
    ufaclub нравится это.
  7. ufaclub

    ufaclub

    Регистр.:
    1 май 2007
    Сообщения:
    394
    Симпатии:
    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."\r\n"$urlstrue);  
    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];


    ?> 


    почти работает! но....почему то первую строчку дублирует... тоесть проверка с нее не идет (

    пример:

    6666cd76f96956469e7be39d750cc7d9
    aed0c99b3ab80f1e8df3af59cf0ae53a
    6007c2c2e02715cac9d8a365152bac27
    05cc7ef32005e67e8959bb4c3cd05702
    1befd44810d7b9bdfc2e1a599a18c307
    1c927383117a61d367f08b1f74d6acf1
    3752b73d65ed8a554fe8a8d98f62fa38
    26a93b8987e1c3f1a204adfaf8eb1675
    6666cd76f96956469e7be39d750cc7d9
    6666cd76f96956469e7be39d750cc7d9
    6666cd76f96956469e7be39d750cc7d9
    6666cd76f96956469e7be39d750cc7d9
    6666cd76f96956469e7be39d750cc7d9

    остальные - работают как надо...

    в вот если сделать 1 пробел и сделать вид url.txt
    такого вида то все нормально работает и дубли не пишуться %)

    так че за фигня с первой строкой?

    1
    2 6666cd76f96956469e7be39d750cc7d9
    3 aed0c99b3ab80f1e8df3af59cf0ae53a
     
  8. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Ну единственное что приходит в голову:
    1) почисть файл url.txt
    2) замени везде по скрипту \r\n на \n

    В Unix-системах символ переноса строки - \n (Это в винде ещё надо использовать символ переноса каретки \r) — возможно из-за того что у тебя первая строка имеет другой символ переноса, она не находится потом.

    А ещё лучше и вернее - возми открой url.txt в каком-нибудь редакторе, который показывает управляющие символы - чтобы видеть, может быть в самом самом начале строки есть какой-то спец-символ, и из-за этого первая строка не котируется. (тоесть к примеру самая первая строка на самом деле может иметь вид "\n6666cd76f96956469e7be39d750cc7d9" а не "6666cd76f96956469e7be39d750cc7d9" - и потому мы её не можем определить)
     
  9. wwwitalya

    wwwitalya Создатель

    Регистр.:
    4 май 2009
    Сообщения:
    45
    Симпатии:
    18
    $key равен нулю, если хэш в первой строке найден, потому условие
    PHP:
    if (!$key
    выполняется.
    Правильно будет
    PHP:
    if ($key===false)
    Добавлено через 3 минуты
    Собственно, http://ru2.php.net/manual/en/function.array-search.php