|
|
|
| privet vsem
mne nujna poluchit spisok katalogov i pod katalogov ?
tipa deriva kataloga.
i formirovat massiv s imenami filov i katalogov ! | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 21:48)
| | Вы можете воспользоваться следующим скриптом
<?php
scan_dir(".");
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по каталогу
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
echo $dirname."/".$file."<br>";
scan_dir($dirname."/".$file);
}
}
}
// Закрываем директорию
closedir($dir);
}
?>
|
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1718 | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 21:56)
| | mne nado eshe dliya kajdogo kataloga nado stavit chekbox i po najatie knopki vivesti vse fili ili katalogi katorie bila vibrana | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 22:00)
| | Хм... тогда следует выводить и файлы, но скрывать их при помощи тэга <div>, а потом, по нажатию на checkbox отображать их http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=3508
<?php
scan_dir("scripts");
$i = 0;
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по каталогу
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если это файл - выводим его скрытым
if(is_file($dirname."/".$file))
{
echo "<div style='display:none'>".$dirname."/".$file."</div>";
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
echo "<input type='checkbox' onclick='showhide($i)'>".$dirname."/".$file."<br>";
scan_dir($dirname."/".$file);
}
}
}
// Закрываем директорию
closedir($dir);
}
?>
|
Задача большая и требует привлечения JavaScript http://www.softtime.ru/forum/index.php?id_forum=4 | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 22:00)
| | 2 cheops
Что-то я замечаю народ приходит всё чаще не за советом, а за тем чтоб им по заказу написали нахаляву скрипт. Печально :(
2 behrad
Тебе дали код как прочитать содержимое каталога. Подумай немного и доделай как тебе нужно. Не писать же за тебя всю программу. А ключевой алгоритм тебе дали. Теперь только воспользоваться мозгами и рекурсией нужно. | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(27.07.2005 в 22:21)
| | >Что-то я замечаю народ приходит всё чаще не за советом, а за
>тем чтоб им по заказу написали нахаляву скрипт. Печально :(
Если скрипт небольшой, его написать нетрудно и полезно - это по аналогии со спортом, хорошая тренировка для отвечающего, позволяющая держаться в тонусе. Кроме того, многим нужен работающий скрипт, чтобы действительно разобраться в проблеме и решать остальные задачи по аналогии.
Большой скрипт в рамках форума разработать практически невозможно - поэтому такие темы здесь либо просто игнорируются, либо ведётся дискуссия по алгоритму и идеям. | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(27.07.2005 в 22:21)
| | a mojna li reshit etot vapros bez rekursi ?
esli znaite daite silku ili primer kak eta sdelat!
zarane sposiba | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 22:32)
| | Если нужно обходить вложенные директории, то без рекурсии обойтись нельзя, вернее можно, но получится ещё хуже - деревья - это единственный вид задач, где целесообразно применение рекурсии. | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 22:36)
| | ya ponimau shto tak omijna !
mne nado sdelat tak shtobi vivolilos vse imena filov i pod katalogov i ikh saderjimoe.
i dliya kajdovo iz nikh sushestvoval check box .
polzovatel doljen vibrat kakie nebud fili i posle najatie knopki zapisivalos v file imena filov katorie polzovatel vibral | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 22:42)
| | А обязателен ли checkbox - просто код с использованием сплава JavaScript+HTTP+PHP очень сложно отлаживать. Может просто каждая директория будет ссылкой, при нажатии на которую выводится её содержимое (поддиректории и файлы), а при нажатии на ссылку поддиректории будет выводится содержимое поддиректории? | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 22:54)
| | obizatelen checkbox , shtobi polzovatel mog odnavremeno vibrat neskolka filov !!
voi i vsa problema | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 22:58)
| | Так checkbox-ы должны быть только у файлов или у файлов и директорий? | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 23:00)
| | u filov i katalogov .
na primer vibran glavni katalog to vse ego pod katalog i fili i toje doljnio bit vibrani | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 23:15)
| | Нехилый скриптик получится.
Это во первых нужно прочитать дирректорию, и выдав HTML код прописать в чекбокс как идентификатор объекта его индекс в массиве файлов. Тогда при выводе в цикле можно отфильтровывать мусор. А вот учитывая что тут ещё и подкаталоги ... У меня пока ступор по вопросу применения сего алгоритма для вложеных дирректорий. Еслиб их был один уровень внутри каталога, можно было бы ввести двухмерный массив в качестве имени чекбокса. А когда вложеных уровней больше одного, этот способ непреемлим. | |
|
|
|
|
|
|
|
для: behrad
(27.07.2005 в 23:15)
| | Дубль два.
Я тут посидел, подумал, и за завтраком родилась такая идея. Прочитать все файлы и папки из каталога в виде одного массива. Для никсовых систем это команда find.
После этого каждый из каталогов формируем командой ls (это на мой взгляд лучше чем парсить результат выполнения find). И когда формируется файловое древо, записывать в checkbox индекс соответствующиего файла/каталока из массива возвращённого find. Таким образом мы избегаем многоуровневой системы идентификаторов.
Я надеюсь сама идея ясна ... При реализации конечно нужно учесть специфику проверок путей. | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(28.07.2005 в 07:03)
| | ideya khorosha
nu est problema !
ya ne mogu zagnat imena filov i katalogov v massiv potomu shto idet rekursiya !!!
kak mne pro indeksivovat checkbox .
i eshe vapros kak mne vivesti viprannie checkbox-i .
vot cod katori ispolzou
if (isset($_POST['checkBox']))
{
print_r($_POST);
echo $Files = $_POST[checkBox'];
}
echo '<form method="post" action="">';
scan_dir(".");
//$i=0;
function scan_dir($dirname)
{
$dir = opendir($dirname);
while (($file = readdir($dir)) != false)
{
if($file != "." && $file != "..")
{
if(is_file($dirname."/".$file))
{
$STR=$dirname."/".$file;
$arr=split('/',$STR);
while(list($key,$value)= each ($arr))
{
echo ' ';
}
echo '<input type="checkbox" name="checkBox" value="Che|'.$dirname."/".$file.'">'.$STR." - "."<br>";
}
if(is_dir($dirname."/".$file))
{
$STR=$dirname."/".$file;
$arr=split('/',$STR);
while(list($key,$value)= each ($arr))
{
echo ' ';
}
echo '<input type="checkbox" name="checkBox" value="Che|'.$dirname."/".$file.'">'.$STR."<br>";
scan_dir($dirname."/".$file,$fd,$fb);
}
}
}
closedir($dir);
}
echo '<input type="submit" value="Push">';
echo '</form>';
|
| |
|
|
|
|
|
|
|
для: behrad
(28.07.2005 в 16:34)
| | По поводу рекурсии, я тебе предложил вариант, ты им не воспользовался. Других вариантов у меня нет. | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(28.07.2005 в 17:31)
| | u mniya vot problema shto ne mogu formirovat massiv iz imen filov i katalogov!
pri rekursi chetchik zbivaetsa !
a pro vash variant mojna po padrobne !
P.S. zaranee sposiba | |
|
|
|
|
|
|
|
для: behrad
(28.07.2005 в 18:58)
| | дак и будет сбиваться. Ты же одномерный массив используешь. И при очередном проходе цикла перезаписываешь его.
мой вариант состоял в том, что:
$dir = "arhiv/"; // корневая папка в которой лежат остальные
exec ("ls ".$dir,$files); // теперь в массиве files лежат названия всех файлов и каталогов включая . и ..
for ($i=0; $i<count($files); $i++){
if ($files[$i] != "." && $files[$i] != ".."){
выполняем то что нужно
}
}
|
Это я привёл пример получения содержимого дирректории.
Для твоих целей его можно модернизировать. Для начала ввести exec("find ".$dir,$allfiles); Массив $allfiles будет содержать индексы и названия всех файлов в указаной дирректории. Причём не одного уровня, а всех.
теперь. обходя локализованый массив $files нужно сапоставлять значение элемента с массивом $allfiles. Допустим тождество найдено. Теперь задача взять ключ элемента массива $allfiles и записать его в чекбокс.
Потом, когда наживаешь кнопочку для вывода только отмеченых файлов, выполнить команду find как показано выше, и во время обхода массива через while вывести только те элементы, ключь которых есть в массиве, образованом чекбоксами. (А можно и точно также через find и ls выводить, просто принтить опятьже только совпадения с содержимым чекбоксов)
----
Есть и другой способ, исключающий использование ls и всецело построеные на find. Но он гораздо сложнее с точки зрения реализации. | |
|
|
|