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

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.619
Реакции
1.123
  • Автор темы
  • Модер.
  • #1
Перерыл гулю и нигму в поисках решения моего вопроса с готовым примером, но так и не нашел ничего похожего... а в написании кода с нуля - я слаб(
В общем кто-то уже делал подобное, и если не лень - подскажите код или же готовый скрипт для его работы...

Предполагается что запрос на пхп скрипт будет вида Для просмотра ссылки Войди или Зарегистрируйся и этот запрос должен отобразить 2-е значение (3-е 4-е и т.д.) по заданному разделителю, например ; или |

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

Подскажите код или ткните пальцем на пример примерного решения этого вопроса...
 
Код:
    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];
        }
    }
 
  • Автор темы
  • Модер.
  • #3
Выводит инфу ту что надо, спасибо. Но почему не хочет работать если я например хочу вывести урл картинки в <img src="test.php?num=дерево клен"Ю просто выводит что картинки нет Для просмотра ссылки Войди или Зарегистрируйся
И ещё вопрос, при таком выводе какой рекомендуемый максимальный размер текстового файла и сколько максимум строк нужно делать в файле чтобы выбор нужных данных был "без тормозов" и нагрузки...?
 
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 строк использовать и выше.
 
Последнее редактирование:
  • Автор темы
  • Модер.
  • #5
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 строк использовать и выше.
После .$str_num[1]. идет перенос строки и img тег ломается, в первом случае тоже на выдаче была вторя пустая строка. Как её удалить чтоб не было переноса?

UPDATE - если проверяю выполнение файла PHP то все работает, только делаю include в нужный файл - изображение с <img... теряется вообще :conf: Или для инклуда в другие файлы тоже по другому как-то надо?
 
Последнее редактирование:
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="">';
 
  • Автор темы
  • Модер.
  • #7
2. Внутри include.php
может что то не так делаю(((
Скрытое содержимое для пользователя(ей): Aglok

Файл include.php положил рядом, вызов делаю mymod.php?num=***
При вставке инклудом в шаблон из файла mymod.php?num=*** получаю что нет IMG вообще :glob:
 
1. Закомментируй 1 строку. И будет одна фотка.
Код:
//echo '<img src="'.trim($str_num[1]).'"alt="">';
include "include.php";
2. Файл include.php должен лежать в той же директории что и file.php
 
  • Автор темы
  • Модер.
  • #9
1. Закомментируй 1 строку. И будет одна фотка.
Код:
//echo '<img src="'.trim($str_num[1]).'"alt="">';
include "include.php";
2. Файл include.php должен лежать в той же директории что и file.php
я так и сделал, но все равно...в выходе когда делаю инклуд получаю код только
Код:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    </body>
</html>
и все остальное содержимое body теряется(((
 
Странно! У тебя внутри 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 ?>
 
Назад
Сверху