Скрипт, выводящий рандомную строку из файла

Тема в разделе "Как сделать...", создана пользователем b7186, 3 мар 2014.

Статус темы:
Закрыта.
  1. b7186

    b7186

    Заблокирован
    Регистр.:
    19 янв 2011
    Сообщения:
    728
    Симпатии:
    91
    Всем привет. Народ, помогите написать простой скрипт на PHP. Есть текстовый файл, в котором лежат URL по одному в строчку, вида:

    Код:
    http://site.ru/page1.html
    http://site.ru/page2.html
    http://site.ru/page3.html
    http://site.ru/page4.html
    Скрипт должен случайным образом брать одну любую строку из списка и выводить пользователю. Было бы вооще шикарно, если бы пользователю еще писалась кука, цель которой проверить обращался пользватель к скрипту, или нет. Если обращался, то в течении 1 часа ему показываем все тот же URL из списка.

    Чувствую, что дело то плевое, а как сделать хз :(
     
  2. The_Wolf

    The_Wolf

    Регистр.:
    21 окт 2013
    Сообщения:
    339
    Симпатии:
    189
    вот пример :
    PHP:
    <?php
    $file_handle 
    fopen("pagelist.txt""r"); // откроем файл
    $rand = array(); // создаем пустой массив
    while (!feof($file_handle)) { 
    $line fgets($file_handle);
    $line=str_replace("\n","",$line);
    $rand[] = $line;
    }
    fclose($file_handle);
    echo 
    $rand[rand(0,count($rand))];
    ?>
    p.s : куками не знаю как работать
     
    b7186 нравится это.
  3. Darkness

    Darkness Постоялец

    Регистр.:
    21 янв 2013
    Сообщения:
    146
    Симпатии:
    69
    PHP:
    $file file('index.php');
    if (
    is_array($file) && count($file) > 0) {
        echo 
    $file[mt_rand(0count($file))];
    }
     
    b7186 и latteo нравится это.
  4. murlo

    murlo Создатель

    Регистр.:
    8 июн 2006
    Сообщения:
    34
    Симпатии:
    33
    PHP:
    if(!is_file('url.txt') or !$data file_get_contents('url.txt')) exit('ERROR:1');
    if(!
    $data preg_split("/[\s]+/"$data, -1PREG_SPLIT_NO_EMPTY)) exit('ERROR:2');
    // или так. Но в файле не должно быть пустых строк и в конце файла не должно быть переноса строк. Лучше то что выше
    // if(!is_file('url.txt') or !$data = file('url.txt')) exit('ERROR:1');
    // $data = array_map('trim',  $data);

    $key = isset($_COOKIE['test_url']) ? (int) $_COOKIE['test_url'] : false;
    if(
    $key !== false and array_key_exists($key$data)) exit($data[$key]);
    $key array_rand($data);
    // можно было бы писать в cookie URL, но подумав, я решил что так лучше.
    setcookie('test_url'$keytime()+3600);
    exit(
    $data[$key]);
     
    Последнее редактирование: 3 мар 2014
    b7186 нравится это.
  5. Darkness

    Darkness Постоялец

    Регистр.:
    21 янв 2013
    Сообщения:
    146
    Симпатии:
    69
    Полный вариант.
    PHP:
    $urlfromfile file('index.php');
    if(
    is_array($urlfromfile) === true) {
        
    $countstr count($urlfromfile);
        if (
    $countstr 0) {
            if (empty(
    $_COOKIE['urlfromfile']) === false && strlen($_COOKIE['urlfromfile']) > 0) {
                for (
    $idx 0$idx $countstr$idx++) {
                    if (
    $_COOKIE['urlfromfile'] === md5($idx) . sha1($idx)) {
                        echo 
    $urlfromfile[$idx];
                    }
                }
                unset(
    $idx);
            } else {
                
    $curenturl mt_rand(0$countstr);
                
    setcookie('urlfromfile'md5($curenturl) . sha1($curenturl), time() + 3600'/''.' str_ireplace('www.'''$_SERVER['SERVER_NAME']), nulltrue);
                echo 
    $urlfromfile[$curenturl];
                unset(
    $curenturl);
            }
        }
        unset(
    $countstr);
    }
    unset(
    $urlfromfile);
     
    Последнее редактирование: 4 мар 2014
    b7186 нравится это.
  6. b7186

    b7186

    Заблокирован
    Регистр.:
    19 янв 2011
    Сообщения:
    728
    Симпатии:
    91
    Всем спасибо. Еще вот такой код посоветовали:
    Код:
    <?php
      if (!isset($_COOKIE['url']) || empty($_COOKIE['url']))
      {
        $txt = file('1.txt'); 
        $url = $txt[array_rand($txt)]; 
        unset($txt);
        setcookie('url', $url, time() + 60 * 60);    
        echo $url;      
      }
      else
      {
        echo $_COOKIE['url'];
      }
    ?>
    Пожалуй на нем остановлюсь.
     
    The_Wolf нравится это.
Статус темы:
Закрыта.