Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод файлов из директории с параметрами index.php?id=number
 
 автор: Oleg77   (24.12.2014 в 20:20)   письмо автору
 
 

Здравствуйте, форумчане!
Не подскажете как сделать следующее:
вывести текстовые файлы из директории на странице index.php с ссылками на каждый файл типа index.php?id=number (т.е. изначально номеров нет)


С уважением,
Олег

  Ответить  
 
 автор: confirm   (24.12.2014 в 20:34)   письмо автору
 
   для: Oleg77   (24.12.2014 в 20:20)
 

Можно использовать, например, функцию glob(), она вернет массив файлов директории, которые в цикле описать как ссылки.

Или вопрос не в том как вывести ссылки, а в том как отобразить файл по запросу?

  Ответить  
 
 автор: Oleg77   (24.12.2014 в 20:47)   письмо автору
 
   для: confirm   (24.12.2014 в 20:34)
 

Здравствуйте!

Вот код:

<body>

<table cellspacing='0'> <!-- cellspacing='0' is important, must stay -->
<tr><th>Описание игры</th><th>Переход</th><th>Картинка</th></tr><!-- Table Header -->

<?php
$dir 
'php';
$skip = array('.''..''index.php','style.css');
$files scandir($dir);
foreach(
$files as $file) {
    if(!
in_array($file$skip))
        echo(
'<tr><td></td><td><a href="http://localhost/books.ru/'.$file.'">'.$file.'</a></td><td>' '<br />');
}
?>

</body>


Здесь при нажатии на ссылки, открывается новая страница с текстом, т.к. не используется параметр, т.е. index.php?id=number .
Хотел бы это реализовать с параметрами, чтобы открывать на той же (index.php?id=number).
Не напишите?

Заранее благодарю.

  Ответить  
 
 автор: confirm   (24.12.2014 в 21:01)   письмо автору
 
   для: Oleg77   (24.12.2014 в 20:47)
 

Погодите. Есть файлы в каталоге, они как я понимаю ничейные, то есть нет у них владельцев, и вы просто хотите их пронумеровать от 1 до ..., вывести список этих файлов, а по запрошенному номеру выводить на страницу содержание запрошенного файла, так?

  Ответить  
 
 автор: Oleg77   (24.12.2014 в 21:04)   письмо автору
 
   для: confirm   (24.12.2014 в 21:01)
 

Да, выводить на странице index.php по типу index.php?id=номера

С уважением,
Олег

  Ответить  
 
 автор: confirm   (24.12.2014 в 21:17)   письмо автору
 
   для: Oleg77   (24.12.2014 в 21:04)
 

Ну список вывести просто:

<?
foreach(glob('*.ext') as $f) {
    
$n++;
    
$files .=  '<tr><td></td><td><a href="?id='.$n.'">'.basename($f).'</a></td><td>';
}

echo 
$files;


где ext - расширение файлов нужных для списка, если это txt, значит замените на txt.

Если у вас файлы в корне сайта (так у вас написано, что плохо само по себе), то путь к ним как прописано ?id, остальное браузер подставит.

А это что такое <td>' . '<br /> ? Не должно быть никаких тегов между тегами элементов таблицы, то есть тег BR в никакие ворота здесь.

  Ответить  
 
 автор: Oleg77   (24.12.2014 в 21:40)   письмо автору
 
   для: confirm   (24.12.2014 в 21:17)
 

Получается, выводит список файлов с ссылками с id, но сами страницы не открываются при нажатии на эти ссылки.

<td><br> это просто для тренировки писал.

Расширение файлов у меня html.

Спасибо.

  Ответить  
 
 автор: confirm   (24.12.2014 в 23:54)   письмо автору
 
   для: Oleg77   (24.12.2014 в 21:40)
 

Так я же вам задавал вопрос что надо, вывести ссылки или страницы. Чтобы отобразить страницу, нужно делать обратное - получить номера файлов и подключить нужный:

<?
if($id = (int)$_GET['id']) {
    
$f glob('*.ext');
    include 
$f[$id-1];
}


А вообще, эти страницы должны иметь или хозяина или порядок, а не лежать бесхозно да еще в корне. Если есть база, значит нужно описать их в базе, там же они будут получать и идентификаторы уникальные.

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

  Ответить  
 
 автор: Oleg77   (25.12.2014 в 00:52)   письмо автору
 
   для: confirm   (24.12.2014 в 23:54)
 

Выводится файл, но на странице дублируется несколько раз.
Как бы это исправить?

Благодарю.

  Ответить  
 
 автор: confirm   (25.12.2014 в 01:23)   письмо автору
 
   для: Oleg77   (25.12.2014 в 00:52)
 

Значит ваш код подключает его несколько раз, а почему, откуда же мне знать. Вы код свой показывайте, как вы это делаете, тогда можно и сказать почему.

  Ответить  
 
 автор: Oleg77   (25.12.2014 в 18:00)   письмо автору
 
   для: confirm   (25.12.2014 в 01:23)
 

Здравствуйте!
Вот код:

<?php
foreach (glob ('php'.'/*') as $f) { 
    
$n++;
    if(
$id = (int)$_GET['id']) {  
    
$f glob('*.html'); 
    include 
$f[$id-1];  
 }    
$files .=  '<a href="?id='.$n.'">'.basename($f).'</a><br>'
}
echo 
$files
 
?>


Т.е. нажимая на ссылку открывается страница со всеми файлами из каталога.

  Ответить  
 
 автор: confirm   (25.12.2014 в 18:48)   письмо автору
 
   для: Oleg77   (25.12.2014 в 18:00)
 

Ну вы молодец, хотите по запросу ID выбирать нужное, а гребете все в кучу. Вы, что начинаете учить язык или? Ну это же бедлам непонятный, кончено все скопом подключится, так к в цикле подключение.

Ваш индексный файл должен готовить список ссылок на файлы, и проверять был ли запрос файла, и, ЕСЛИ был, тогда получить нужный и подключить его, и это РАЗДЕЛЬНЫЕ операции, а не все в куче.

<?
//вывод  списка файлов
foreach (glob ('php'.'/*.html') as $f) {  //если нужны html, то почему гребете все * ?
    
$n++; 
    
$files .=  '<a href="?id='.$n.'">'.basename($f).'</a><br>';  
}

echo 
$files;

//если бы запрос файла, выводим его на странице
if($id = (int)$_GET['id']) {   
    
$f glob('php'.'/*.html');  //а здесь почему тогда другой путь *.ext ? 
    
include $f[$id-1];
}  

  Ответить  
 
 автор: Oleg77   (25.12.2014 в 19:24)   письмо автору
 
   для: confirm   (25.12.2014 в 18:48)
 

Спасибо за помощь!

С уважением,
Олег

  Ответить  
 
 автор: confirm   (25.12.2014 в 19:41)   письмо автору
 
   для: Oleg77   (25.12.2014 в 19:24)
 

Зря радуетесь. Такое возможно, если осторожно, а если сегодня файл ab.html первый в списке, а завтра вы добавите файла aa.html, то уже ab.html станет вторым, что никак не соответствует ранее заявленному, в общем путаница.

  Ответить  
 
 автор: Trianon   (25.12.2014 в 13:33)   письмо автору
 
   для: Oleg77   (25.12.2014 в 00:52)
 

Вообще-то, закладываться на постоянство порядка файлов в каталоге - достаточно наивный поступок.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования