Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: помогите сделать выпадающий список файлов директории
Форумы портала PHP.SU » » Работа с файловой системой и файлами » помогите сделать выпадающий список файлов директории

Страниц (1): [1]
 

1. ikirab1 - 09 Декабря, 2011 - 17:40:23 - перейти к сообщению
Помогите написать скрипт который будет сканировать директорию получать из нее название файлов и записывать их в выпадающий список! И чтобы после выбора пользователем файла он подключался в сценарий с помощью requare_once();
2. Данил_123 - 09 Декабря, 2011 - 17:57:18 - перейти к сообщению
ikirab1 и что, где вопрос?
(Добавление)
все понял, тормознул:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $dir='files';
  4. $files=scandir($dir);
  5.  
  6. for($i = 1; $i<10;$i++){
  7. print "<a href=files/".$files[$i].">".$files[$i]."</a>"."<br />";
  8. }
  9. ?>


Выдаст 10 файлов
Достаточно, простой вариант, не рекомендую использовть, если допилить, то нормально
3. Bio man - 09 Декабря, 2011 - 18:48:55 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?
  2. echo "<form method='post'>";
  3. echo "<select name='menu' size=1>";
  4. foreach(scandir('.') as $item){
  5.         if(is_file($item)) {
  6.                 echo "<option value='$item'>$item</option>";
  7.         }
  8.        
  9. }
  10. echo "</select>
  11. <input type='submit' name='submit' value='ok' />
  12. </form>";
  13. if($_SERVER['REQUEST_METHOD'] == 'POST'){
  14.         require_once $_POST['menu'];
  15. }
  16. ?>

(Добавление)
Данил_123 пишет:
не рекомендую использовть
а зачем тогда написал раз не рекомендуешь?
(Добавление)

вопрос к профи - будет ли при каждой итерации выполняться ф-ция scandir?
4. Данил_123 - 09 Декабря, 2011 - 18:55:23 - перейти к сообщению
Bio man я ответил на вопрос, не рекондую, так как много лишнего кода генерируется.. $i = 1; $i<10;$i++ вместо 10 подсчитать количество файлов в папке через readdir вроде, и все код имеет право жизни
5. Bio man - 09 Декабря, 2011 - 18:58:53 - перейти к сообщению
Данил_123, не актуально в данной задаче использовать цикл for. while или foreach, самое то.
6. etoYA - 09 Декабря, 2011 - 19:03:06 - перейти к сообщению
Данил_123, readdir? Не, не слышал... Как насчет count($files) ?
7. Данил_123 - 09 Декабря, 2011 - 19:26:42 - перейти к сообщению
etoYA можно и count.. Можно посчитать количество ключей массива
(Добавление)
Bio man пишет:
Данил_123, не актуально в данной задаче использовать цикл for. while или foreach, самое то.
полностью согласен, но решил долго не думая
8. Мелкий - 09 Декабря, 2011 - 19:50:10 - перейти к сообщению
Bio man пишет:
будет ли при каждой итерации выполняться ф-ция scandir?

Вызовется только 1 раз. Так что лаконично и быстро.
9. ikirab1 - 10 Декабря, 2011 - 16:33:14 - перейти к сообщению
А каким образом можно сделать чтобы сценарий работал только с выбранным файлом?
Т.е. пользователь может выбрать один файл и он подключиться к сценарию а потом если он выбирает выбирает другой файл предыдущий файл отключается и подключается новый!
10. Bio man - 10 Декабря, 2011 - 17:54:00 - перейти к сообщению
ikirab1, а я что сделал?
11. GrishaDm - 16 Декабря, 2011 - 08:59:09 - перейти к сообщению
Bio man пишет:
PHP:
скопировать код в буфер обмена
  1. <?
  2. echo "<form method='post'>";
  3. echo "<select name='menu' size=1>";
  4. foreach(scandir('.') as $item){
  5.         if(is_file($item)) {
  6.                 echo "<option value='$item'>$item</option>";
  7.         }
  8.        
  9. }
  10. echo "</select>
  11. <input type='submit' name='submit' value='ok' />
  12. </form>";
  13. if($_SERVER['REQUEST_METHOD'] == 'POST'){
  14.         require_once $_POST['menu'];
  15. }
  16. ?>

(Добавление)
Данил_123 пишет:
не рекомендую использовть
а зачем тогда написал раз не рекомендуешь?
(Добавление)

вопрос к профи - будет ли при каждой итерации выполняться ф-ция scandir?

Вопрос к "профи" - вот вы дали код а теперь проведите с ним следующий эксперимент - выберите директорию где более 10000 файлов и браузер Internet Explorer и запустите его. В лучшем случае из-за тега select такая страница зависнет и придётся снимать задачу. А в худшем вплоть до переустановки ОС. И вообще такое криворукое решение не достойно упоминания - надо выводить постраничным списком с навигацией и указанием сверху текущего пути без всяких select и делить на файлы и папки (папки делать, например, ссылками).

 

Powered by ExBB FM 1.0 RC1