Нужен скрипт выбора нужной строки из TXT по параметру заданному в URL

Тема в разделе "Как сделать...", создана пользователем killoff, 31 июл 2015.

  1. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.017
    Симпатии:
    681
    Перерыл гулю и нигму в поисках решения моего вопроса с готовым примером, но так и не нашел ничего похожего... а в написании кода с нуля - я слаб(
    В общем кто-то уже делал подобное, и если не лень - подскажите код или же готовый скрипт для его работы...

    Предполагается что запрос на пхп скрипт будет вида http://domen/db.php?num=дерево и этот запрос должен отобразить 2-е значение (3-е 4-е и т.д.) по заданному разделителю, например ; или |

    Содержание TXT файла будет примерно такое:
    Код:
    дерево|это буратино
    дерево береза|/img/24.jpg
    дерево клен|/img/5.jpg
    кленовый|/img/1.jpg
    и т.д.
    Чувствительность к регистру слова для выбора значения не важна, главное чтобы выборка соответствовала значению строки до первого | или ;

    Подскажите код или ткните пальцем на пример примерного решения этого вопроса...
     
  2. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    Код:
      
        if($_GET)
            $num = trim(strip_tags($_GET['num']));
        if($myFile = fopen("text.txt", "r")){
            $lines = array();
    
            while($myLine = fgets($myFile)){
                $lines[] = $myLine;
            }
    
            fclose($myFile);
          
            foreach ($lines as $value) {
                $str_num = explode('|', $value);
                if($str_num[0] == $num)
                    echo $str_num[1];
            }
        }
     
    killoff нравится это.
  3. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.017
    Симпатии:
    681
    Выводит инфу ту что надо, спасибо. Но почему не хочет работать если я например хочу вывести урл картинки в <img src="test.php?num=дерево клен"Ю просто выводит что картинки нет https://yadi.sk/i/JjOwuNXoiD2Sv
    И ещё вопрос, при таком выводе какой рекомендуемый максимальный размер текстового файла и сколько максимум строк нужно делать в файле чтобы выбор нужных данных был "без тормозов" и нагрузки...?
     
  4. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    1. В теге src - необходимо указывать ссылку на уже готовое изображение. Т.е она смотрит на заголовок который передаётся с сервера. А через get запрос ты получаешь просто текст-ссылку. Поэтому тебе нужно создавать уже сгенерированный url.
    Код:
    <?php
        $num = '';
        if($_GET)
            $num = trim(strip_tags($_GET['num']));
        if($myFile = fopen("text.txt", "r")){
            $lines = array();
    
            while(!feof($myFile)){
                $myLine = fgets($myFile);
                $lines[] = $myLine;
            }
    
            fclose($myFile);
        }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <?php
                foreach ($lines as $value) {
                $str_num = explode('|', $value);
                if($str_num[0] == $num)
                    //$str_num[1];
                    echo '<img src="'.$str_num[1].'"alt="">';
            }
        ?>
    </body>
    </html>
    2. Прогоняли и через 500мб, по умолчанию fgets использует 1024б памяти на строку. Если файлы очень большие 1гб, то ставятся буфер на одну итерацию fgets($myFile, 65535);
    У тебя строки небольшие то можно и 100000 строк использовать и выше.
     
    Последнее редактирование: 1 авг 2015
    killoff нравится это.
  5. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.017
    Симпатии:
    681
    После .$str_num[1]. идет перенос строки и img тег ломается, в первом случае тоже на выдаче была вторя пустая строка. Как её удалить чтоб не было переноса?

    UPDATE - если проверяю выполнение файла PHP то все работает, только делаю include в нужный файл - изображение с <img... теряется вообще :conf: Или для инклуда в другие файлы тоже по другому как-то надо?
     
    Последнее редактирование: 1 авг 2015
  6. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    1. Функция trim(), убирает \r\n.
    Код:
    <?php
        $num = '';
        if($_GET)
            $num = trim(strip_tags($_GET['num']));
        if($myFile = fopen("text.txt", "r")){
            $lines = array();
    
            while(!feof($myFile)){
                $myLine = fgets($myFile);
                $lines[] = $myLine;
            }
    
            fclose($myFile);
        }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <?php
                foreach ($lines as $value) {
                $str_num = explode('|', $value);
                if($str_num[0] == $num){
                    echo '<img src="'.trim($str_num[1]).'"alt="">';
                    include 'include.php';
                }
            }
        ?>
    </body>
    </html>
    2. Внутри include.php
    Код:
    <?php echo '<img src="'.trim($str_num[1]).'"alt="">';
     
    killoff нравится это.
  7. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.017
    Симпатии:
    681
    может что то не так делаю(((

    Файл include.php положил рядом, вызов делаю mymod.php?num=***
    При вставке инклудом в шаблон из файла mymod.php?num=*** получаю что нет IMG вообще :glob:
     
  8. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    1. Закомментируй 1 строку. И будет одна фотка.
    Код:
    //echo '<img src="'.trim($str_num[1]).'"alt="">';
    include "include.php";
    2. Файл include.php должен лежать в той же директории что и file.php
     
  9. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.017
    Симпатии:
    681
    я так и сделал, но все равно...в выходе когда делаю инклуд получаю код только
    Код:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        </body>
    </html>
    и все остальное содержимое body теряется(((
     
  10. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    Странно! У тебя внутри body такой код?:
    Код:
    <?php
                foreach ($lines as $value) {
                $str_num = explode('|', $value);
                if($str_num[0] == $num){
                   // echo '<img src="'.trim($str_num[1]).'"alt="">';
                    include 'include.php';
                }
            }
        ?>
    Именно обрамлен <?php ?>