Изваждане на файлове от папка и проблем с повтаряне

IzKuFeLiQqQqQ

Registered
Здравейте с един код вадя съдържанието на една папка и съм направил така че да отваря и вади съдържанието на подпапките му но имам един проблем първо аз искам да изкарам името на папката преди файловете(червеното в селекта...) а то ми го изкарва и преди и след файловете и 2-ро примерно имам 3 подпапка и скрипта вади всички файлове от подпапките в всяка една...

ето погледнете селекта http://cs-kazanlak.vacau.com/ (не гледайте домейна само тестов е ;))

ето частта с кода за изкарване на файловете
Код:
    <form method="post">
  <select name="openfile" onchange="this.form.submit();">
  <option value="" > </option>
<?php 
$file = htmlspecialchars($_GET['file']);
$directory = opendir('./'); //от коя директория да извежда файловете
while ($files = readdir($directory)) 
{ 
$file_array[] = $files; 
} 
foreach ($file_array as $files) 
{  
if($files == ".." || $files == ".") 
{ 
continue; 
}
$exp = explode(".",$files);
$exp1 = $exp[1];
if($exp1=="") {
echo "<option style='background-color:red;'>$files</option>";
$directory1 = opendir("$files"); //от коя директория да извежда файловете
while ($files1 = readdir($directory1)) 
{ 
$file_array1[] = $files1; 
} 
foreach ($file_array1 as $files1) 
{  
if($files1 == ".." || $files1 == ".") 
{ 
continue; 
}
echo "<option value='$files/$files1'";if($file) { if($file==$files."/".$files1) {echo "selected";} } echo ">$files/$files1</option>";
}
}if($exp1!=="")  { echo "<option value='$files'";if($file) { if($file==$files) {echo "selected";} } echo ">$files</option>";}
}?>
</select>
</form>
<? if(isset($_POST['openfile'])) {$filess = htmlspecialchars($_POST['openfile']);echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=?file=$filess'>";}
 
Пробвай така : демо

Код:
$path = '../DirInDir/';

          function procheti($path) {
               if (is_dir($path)) {
                    $dir= opendir($path);
                    echo '<ol>';
                    while (($file = readdir($dir))!=FALSE) {
                         if ($file != '.' and $file != '..' and $file != 'index.php') {
                              if (is_dir($path.$file.'/')) {
                                   $path2=$path.$file.'/';
                                   procheti($path2);
                                   echo '<ul><li><hr>';
                                   echo $path.$file.' = E директория<br>';
                                   echo '<hr></li></ul>';
                              } else {
                                   echo '<li>';
                                   echo $path.$file.' = Е Файл<br>';
                                   echo '</li>';
                              }
                         }
                    }
                    echo '</ol>';
                    closedir($dir);
               }
          }

          procheti($path);
?>
 
IzKuFeLiQqQqQ каза:
не мога да го нагодя към моя код ... :( може ли ти да го сложиш в кода ми .. :lol:

Код:
<form method="post">
  <select name="openfile" onchange="this.form.submit();">
  <option value="" > </option>

<?php
$file = htmlspecialchars($_GET['file']
$path = $file.'/'; 
procheti($path); 

function procheti($path) {
               if (is_dir($path)) {
                    $dir= opendir($path);
                    echo '<ol>';
                    while (($file = readdir($dir))!=FALSE) {
                         if ($file != '.' and $file != '..' and $file != 'index.php') {
                              if (is_dir($path.$file.'/')) {
                                   $path2=$path.$file.'/';
                                   procheti($path2);
                                   echo '<ul><li><hr>';
                                   echo $path.$file.' = E директория<br>';
                                   echo '<hr></li></ul>';
                              } else {
                                   echo '<li>';
                                   echo $path.$file.' = Е Файл<br>';
                                   echo '</li>';
                              }
                         }
                    }
                    echo '</ol>';
                    closedir($dir);
               }
          }
 
тъй като още не мога да го пробвам ще ми кажеш ли дали вади файловете от директорията в която е ???
 
мне не успях да го наглася а и май не четеше файловете в директорията която е скрипта...
бтв аз промених малко кода но пак същия ефект...
Код:
<form method="post">
  <select name="openfile" onchange="this.form.submit();">
  <option value="" > </option>
<?php 
$file = htmlspecialchars($_GET['file']);
$directory = opendir('./'); //от коя директория да извежда файловете
while ($files = readdir($directory)) 
{ 
$file_array[] = $files; 
} 
foreach ($file_array as $files) 
{  
if($files == ".." || $files == ".") 
{ 
continue; 
}

if(is_dir($files)) {
echo "<option style='background-color:red;'>$files</option>";
$directory1 = opendir("$files"); //от коя директория да извежда файловете
while ($files1 = readdir($directory1)) 
{ 
$file_array1[] = $files1; 
} 
foreach ($file_array1 as $files1) 
{  
if($files1 == ".." || $files1 == ".") 
{ 
continue; 
}
echo "<option value='$files/$files1'";if($file) { if($file==$files."/".$files1) {echo "selected";} } echo ">$files/$files1</option>";
}
}if(!is_dir($files))  { echo "<option value='$files'";if($file) { if($file==$files) {echo "selected";} } echo ">$files</option>";}
}?>
</select>
</form>

сигурно ще е с някоя проверка ... ама не я измислям... може би нещо с file_exist ..
 
Добре да приемем че index.php ti se namira v papka test

test/index.php

а в тази папка имаш още под паки а в тях имаш други подпаки.

Код:
$path=' ../test/ '; т.е. излизаш едно ниво извън папка тест.

          function procheti($path) { //Име на функцията и патраметър
               if (is_dir($path)) { //Ако зададения път е директория
                    $dir= opendir($path);  // $дир отваря пътя
                    echo '<ol>';
                    while (($file = readdir($dir))!=FALSE) { // вътри цикъла докато се изчерпи съдържанието на отворвната папка
                         if ($file != '.' and $file != '..' and $file != 'index.php') { // Ако $филе са различни от зададените стойности
                              if (is_dir($path.$file.'/')) { // Ако зададения път+открития файл са директория 
                                   $path2=$path.$file.'/'; // Новия път към новооткритата директория 
                                   procheti($path2); // изпълнява самата функция във себе си представи си какво ще стане ако застанеш между две огледала безкрайност
                                   echo '<ul><li><hr>';
                                   echo $path.$file.' = E директория<br>';  // изкарва ти резултат от пътя+файла който са новата директория
                                   echo '<hr></li></ul>';
                              } else {
                                   echo '<li>';
                                   echo $path.$file.' = Е Файл<br>';  // Ако зададения път и открития файл не са директория ти вади лист със фаиловете които се съдържат във $path или съответно във $path.$file.'/'
                                   echo '</li>';
                              }
                         }
                    }
                    echo '</ol>';
                    closedir($dir); // затваряме отворения път
               }
          }

          procheti($path); // Изпълняваме самата функция
?>

Ако и така не го проумееш няма как да ти го напиша
 
И оправи това:

http://cs-kazanlak.vacau.com/?file=index.php

Понеже не си използвал htmlspecialchars , прецаква работата , но все пак се води бъг , по-добре го оправи чрез една проверка. ;)
 
@proba как да го оправя не разбрах каква проверка??? то ако ползвам htmlspecialchars няма ли някак си при запис да се прецакват кодовете???

@svet1bg аз вчера не успях да го вкарам в select-а ама ся успях да го направя ама имам друг проблем директорията излиза под файловете... тоест е така

./papka1/1papka1.txt файл
./papka1/2papka1.txt файл
./papka1/3papka1.txt файл
./papka1 папка

как да го направя да е над тях ...
 

Back
Горе