электронная библиотека почему если закоментить все с if то все нормально считает . а если нет то лезет в вверхний каталог . я же пишу opendir("./$file") Code: <?php $dir = opendir("../books"); while(($file = readdir($dir)) !== false ) { echo "$file<br />"; if ($file != '.' || $file != '..' ) { $bookdir = opendir("./$file"); while (($link = readdir($bookdir)) !== false) { echo "$link <br />"; } closedir($bookdir); } } closedir($dir); ?>
у меня в книге написанно цитата : chdir ("./js"); // переход в подкаталог текущего каталога . это ошибка ?
там короче папка в которой папки в книгами. папки там c++ или html называются . вот в этот скрипт прихожу где то из ../php/show_books.php я хочу чтобы оно входило не только в тот каталог но еще и в попкаталоги. и выводило список файлов из тех папок который выводит первый readdir
я написал так но все пишет : Warning: scandir(/html) [function.scandir]: failed to open dir: No error in C:\php_files\home\banderas\site_gosti\php\show_books.php on line 38 Warning: scandir() [function.scandir]: (errno 0): No error in C:\php_files\home\banderas\site_gosti\php\show_books.php on line 38 $dir = opendir("../books"); while(($file = readdir($dir)) !== false ) { echo "$file<br />"; if ($file != '.' || $file != '..' ) { $files = scandir($file) ; echo "<pre>"; print_r($files); echo "</pre>"; } } closedir($dir);
Солнышко, потому что иначе это шелл, просто шелл, что практически равно взлом, особенно если у тебя виртуальный невыделенный хостинг
http://script4u.ru/php/file/431-phpbrowser-1.0.html вот весьма грамотная реализация, на мой взгляд, вообще, чтения и т.д.
barnaki мм? PHP: <pre><?php $dir = "./somedir"; function recurs($dir,$tab="") { if(!is_dir($dir)) return; $dirs = scandir($dir); foreach ($dirs as $one) { if ($one =='.' || $one =='..') continue; $path = realpath($dir.'/'.$one); if (is_dir($path)) {echo $tab.'['.$one."]\r\n";recurs($path,$tab."\t");continue;} echo "$tab$one\r\n"; } } recurs($dir); ?>
мне надо чтобы выводился не только имя файла но и путь к нему ( собираюсь использовать пути в ссылках) . сделал так Code: public function read_book_dir($book_dir,$tab=""){ if(!is_dir($book_dir)) return; $dirs = scandir($book_dir); foreach ($dirs as $one) { if ($one =='.' || $one =='..') continue; $path = realpath($book_dir.'/'.$one); //$way = realpath($one); if (is_dir($path)) {$way = realpath("$one");echo"way_dir=$way"."<br>"; echo $tab.'['.$one."]<br>";$this->read_book_dir($path,$tab."\t");continue;} $way = realpath($one);echo "way_file=$way"."<br>"; echo "$tab$one\r\n<br>"; } но way все время пустой. . и realpath почему то не отрабатывает. кто подскажет почему. причем и мануале написано что realpath возвращает false если не отрабатывает. а тут просто пустая строка. подскажие это срочно.
barnaki внимательно читайте, что делает функция realpath А вы ей подсовываете только имя конкретной папки без относительного пути до нее. Как должно быть: PHP: <?php $dir = "C:\\"; function recurs($dir, $tab = "") { if (!is_dir($dir)) return; $dirs = scandir($dir); foreach ($dirs as $one) { if ($one == '.' || $one == '..') continue; $path = realpath($dir . '/' . $one); if (is_dir($path)) { echo $tab . '[' . realpath($dir . '/' . $one) . "]\r\n"; recurs($path, $tab . "\t"); continue; } echo $tab . realpath($dir . '/' . $one) . "\r\n"; } } recurs($dir); В вашем скрипте функция возвращает false, чтобы узнать об этом можно использовать функцию var_dump(). При приведении к строке значения false - получается пустая строка
php return массива из класса есть метод PHP: public function total_books($book_dir,$tab=""){ $i= 0; $books = array(); if(!is_dir($book_dir)) return; $dirs = scandir($book_dir); foreach ($dirs as $one) { if ($one =='.' || $one =='..') continue; $path = realpath($book_dir.'/'.$one); if (is_dir($path)) { echo $tab.'['.$one."]<br>";$this->total_books($path,$tab."\t"); continue;} else { //echo "zashlo$i"; $books[$i] = $one; //echo "$books[$i]"; $i++;} } // $dump = var_dump($books); //echo "$dump"; $dump = var_dump($books); // тут он выводит нормальный дамп echo "$dump"; return $books; } а тут в индексе PHP: $result = $book->total_books($book_dir,""); echo "<pre>"; $dump = var_dump($result); echo "dump=$dump"; print_r ($result); echo "</pre>"; result пустой. подскажите чего оно не возвращает этот массив
barnaki чем вам не сиделось в исходном топике, и вы решили создать еще один? Что вы хотите получить в переменной $dump? По секрету - var_dump() не возвращает никакого результата. Создайте минимально рабочий файл с вашим классом и тем как вы вызываете его.
вот файл класса PHP: class book { private static $instance; private static $from_singleton = FALSE; function __construct() { $db = db :: singleton(); if (self::$from_singleton == FALSE) { trigger_error('Direct instantionation is not allowed.', E_USER_ERROR); exit("class db is creating not from singlton "); } self::$from_singleton = FALSE; } ////////////////////////////////////////// public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$from_singleton = TRUE; self::$instance = new $c; } return self::$instance; } public function total_books($book_dir,$tab=""){ $i= 0; $books = array(); if(!is_dir($book_dir)) return; $dirs = scandir($book_dir); foreach ($dirs as $one) { if ($one =='.' || $one =='..') continue; $path = realpath($book_dir.'/'.$one); if (is_dir($path)) { echo $tab.'['.$one."]<br>";$this->total_books($path,$tab."\t"); continue;} else { //echo "zashlo$i"; $books[$i] = $one; //echo "$books[$i]"; $i++;} } $dump = var_dump($books); echo "$dump"; return $books; } } вот его вызов PHP: <?php include ("config/config.php"); include ("classes/db.php"); $db = db :: singleton(); include ("classes/book.php"); $book = book :: singleton(); //$book->make_book_href($book_dir,""); if (!isset($_GET['page'])) {$page =1;} $result = array(); $result = $book->total_books($book_dir,""); echo "<pre>"; $dump = var_dump($result); echo "dump=$dump"; print_r ($result); echo "</pre>"; ?> и var_dump пишет что $result это array но пустой и print_r выводит array(0) а если в самом методе посмотреть то все нормально там array наполнен значениями. он почему то не передается. может кто скажет почему
barnaki скорее всего вы не задаете переменную $book_dir, у меня ваш скрипт работает (естественно если удалить упоминания о переменной $db)