|
|
|
| С получением списка имен файлов проблем нет, но если в папке есть помимо файлов ещё папка, то в массив загоняются и имена этих папок. Можно ли как-то исключить имена папок? Список имен файлов в папке я получаю так:
<?
$ndirct = "news/baza";
$nhdl=opendir($ndirct);
while ($nfile = readdir($nhdl))
{
if (($nfile!=".")&&($nfile!=".."))
{
$na[] = $nfile;
}
}
closedir($nhdl);
if (sizeof($na)!=0)
{
rsort($na);
$vsego=sizeof($na);
}
else
{
echo ("Нет новостей в базе<br><br><a href=news/add_news_form.php>Добавить новость?</a>");
die;
}
?>
|
| |
|
|
|
|
|
|
|
для: TuX
(11.06.2005 в 15:35)
| | Можно использовать функцию is_file, которая проверяет является ли filename файлом.
<?
$ndirct = "news/baza";
$nhdl=opendir($ndirct);
while ($nfile = readdir($nhdl))
{
if (($nfile!=".")&&($nfile!="..") && is_file($nfile))
{
$na[] = $nfile;
}
}
closedir($nhdl);
if (sizeof($na)!=0)
{
rsort($na);
$vsego=sizeof($na);
}
else
{
echo ("Нет новостей в базе<br><br><a href=news/add_news_form.php>Добавить новость?</a>");
die;
}
?>
|
Кстати, можно упростить провреку:
<?
$ndirct = "news/baza";
$nhdl=opendir($ndirct);
while ($nfile = readdir($nhdl))
{
if (is_file($nfile))
{
$na[] = $nfile;
}
}
closedir($nhdl);
if (sizeof($na)!=0)
{
rsort($na);
$vsego=sizeof($na);
}
else
{
echo ("Нет новостей в базе<br><br><a href=news/add_news_form.php>Добавить новость?</a>");
die;
}
?>
|
| |
|
|
|
|
|
|
|
для: isset
(11.06.2005 в 15:48)
| | Почему-то при выполнении Ваших скриптов выполняется только условие else. Скрипт говорит, что "Нет новостей в базе":( | |
|
|
|
|
|
|
|
для: TuX
(11.06.2005 в 16:03)
| | Только что проверил, все работает. Возможно в папке нет файлов.. | |
|
|
|
|
|
|
|
для: isset
(11.06.2005 в 16:09)
| | Всё на месте, мой скрит работает, а Ваш почему-то нет :( | |
|
|
|
|
|
|
|
для: TuX
(11.06.2005 в 16:13)
| |
<?
$mask = "*.txt"; # Выводит все txt файлы, txt можно заменить на любое расширение, файлы которые вы ищите задаються маской в виде имя.расширение (все файлы *.*)
foreach (glob($mask ) as $filename) {
echo $filename.'<br>';
}
?>
|
| |
|
|
|
|
|
|
|
для: Akira
(11.06.2005 в 16:22)
| | У меня есть скрипт более массивный чем этот. Это усовершенствонная версия. Но если он не будет работать или по каким то другим причинам, могу выложить старую версию. | |
|
|
|
|
|
|
|
для: Akira
(11.06.2005 в 16:25)
| |
Warning: Invalid argument supplied for foreach() in E:\server\www\www.samoreg.ru\news\index2.php on line 3
|
| |
|
|
|
|
|
|
|
для: Akira
(11.06.2005 в 16:22)
| | А как можно применить данный скрипт? Что то я не очень понял.
1. Задаем переменную $mask и говорим, что она равна *.txt
2. Делаем преребор для каждого ????
3. Выводим Имя файла на страницу
Можно объяснисть вот эту конструкцию по-этапно?
foreach (glob($mask ) as $filename)
|
| |
|
|
|
|
|
|
|
для: TuX
(11.06.2005 в 16:41)
| |
<?
$mask = "*.txt"; # Задаем маску поиска
foreach (
glob($mask ) as $filename # glob возврашает массив, а foreach ободит его.
)
{
echo $filename.'<br>';
}
?>
|
В $mask задаем путь и тип файлов. Для поиска в папке news всех inc файлов маска будет такая "/news/*.inc".
Если возникает ошибка, то значит сервер не поддерживает glob.
Попробуйте так.
<?
$mask = "*.txt"; # Задаем маску поиска
print_r (glob($mask ) )
?>
|
| |
|
|
|
|
|
|
|
для: isset
(11.06.2005 в 15:48)
| | Всё очень замечательно работает, но только при чтении своих же папок.
Мне очень нужно прочитать папку _http://imyahosta.net/papka, которая находится извне, относительно моего сайта. Как это можно реализовать? есть ли методы подхода к решению подобной задачи?
p.s. в удалённой папке индексного файла нет, при заходе с браузера выводится обычный список файлов (сервер Apache). | |
|
|
|
|
|
|
|
для: PHPFan
(15.06.2005 в 15:42)
| | Можно загрузить спискок файлов в виде HTML-файл, разобрать его, например, при помощи регулярных выражений... к сожалению, указанный вами адрес не отвечает, если вам не сложно прикрепите к сообщению HTML-файл со списком файлов, чтобы можно было на его примере привести рабочий скрипт. | |
|
|
|
|
|
|
|
для: cheops
(15.06.2005 в 20:50)
| | Файл представляет собой обычный список, который по-умолчанию формирует Apache. Пример в аттаче. | |
|
|
|
|
|
|
|
для: PHPFan
(15.06.2005 в 21:04)
| | Можно поступить следующим образом
<?php
$text = file_get_contents("http://imyahosta.net/papka/");
preg_match_all("|<a[\s]+href=\"([^\"]+)\">([^<]+)<|i",
$text,
$out,
PREG_PATTERN_ORDER);
for($i = 0; $i < count($out[1]); $i++)
{
if($out[1][$i] == $out[2][$i]) echo $out[1][$i]."<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(16.06.2005 в 12:25)
| | Огромадное спасибо! Это действительно работает! Причём очень хорошо. Протестил при самых различных именах файлов - ни единого сбоя :)
cheops просто нет слов. Вы классный специалист.
извините за оффтоп... | |
|
|
|
|
|
|
|
для: TuX
(11.06.2005 в 15:35)
| | Для этого можно добавить проверку при помощи функции is_file(), которая возвращет true если в качестве аргумента передано имя файла и false в противном случае
<?php
if(is_file($nfile))
{
// ...
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(11.06.2005 в 20:55)
| | Сложный вариант =)
<?
$dirname = '.'; # Данный Каталог (Указываем любой)
$dir = opendir($dirname); # Открываем каталог
while ($file = readdir($dir))
{
$size = bcdiv(@filesize($file), 1024 , 2); /* чисто символьный размер в кб */
$size_full = round($size).'(кб.)'; /* размер файла с указанием в чем измеряем */
$filename = substr($file,0,strpos($file,".")); /* имя файла без расширения */
$exe = strrchr($file, '.'); /* его расширение */
if(($file != ".") # Каталог Данный
&&($file != "..") # Каталог Корневой
&& (substr($file, -3) != "php") /* Файлы с расшерением .php не выводяться, можно указать любой тип файлов который не надо выводить, пример: && (substr($file, -3) != "html") */
&&(is_file($file)) # Не выводим каталоги
)
{
print $file.'<br>';
}
}
closedir($dir); # Закрываем каталог
?>
|
А делает то же =)) | |
|
|
|
|
|
|
|
для: Akira
(11.06.2005 в 21:13)
| | Cкажи только, зачем тебе проверка ($file != ".") и ($file != "..") ? | |
|
|
|
|
|
|
|
для: isset
(11.06.2005 в 21:19)
| | Осталось по старой памяти =) Я ведь использовал его в самых разныхситуациях =)
Мне проше было закомментировать is_file($file) чем дописывать ($file != ".") и ($file != "..").
На самом деле они не нужны. Да и скрипт устарел =) glob на много удобнее... | |
|
|
|
|
|
|
|
для: Akira
(11.06.2005 в 21:27)
| | Glob может и лучше, но тормозной он | |
|
|
|
|
|
|
|
для: isset
(11.06.2005 в 21:31)
| | Не разу не заметил. | |
|
|
|
|
|
|
|
для: Akira
(11.06.2005 в 21:37)
| | А где можно узнать поподробнее, что такое glob.
Думал здесь найду, но не нашёл :(
http://www.softtime.ru/bookphp/group.php?id_group=0
Вот эта конструкция выводит Array вместо имен файлов, в папке 19 файлов и array выводится 19 раз
<?
$mask = "baza/*.html";
foreach (glob($mask) as $filename) {
echo $filename.'<br>';
}
?>
|
| |
|
|
|
|
|
|
|
для: TuX
(12.06.2005 в 15:20)
| | glob помешает имена найденных файлов\папок в массив.
Надо учесть, что указываем $mask исходя из места расположения скрипта.
Поробуйте
<?
$mask = "baza/*.html"; # Задаем маску поиска
print_r (glob($mask ) )
?>
|
Это выведет все файлы в массиве. | |
|
|
|
|
|
|
|
для: Akira
(12.06.2005 в 17:31)
| | Всё, разобрался, всем огромное спасибо! | |
|
|
|