PDA

View Full Version : سوال: لیست کردن کل پوشه ها



nsco_nsco
سه شنبه 09 مهر 1392, 03:42 صبح
سلام دوستان
یک سوال من چطوری می تونم زمانی که یک پوشه را می خوانم بیاد کل پوشه های زیر گروه و همچنین پوشه های زیر گروه اون پوشه ها را تا اخر نمایش بدهد ممنون

sohail0098
سه شنبه 09 مهر 1392, 05:56 صبح
سلام
من میگم سه سالی هست که کد نزدم ول اینو که میگی اون موقع که کار می کردم با یاهو یوزر اینترفیس دیده بودم که میشه نمایش درختی از پوشه ها داشت
امیدوارم این چرت و پرتا بدردت بخوره

AliRezaPro
سه شنبه 09 مهر 1392, 09:44 صبح
تست کنید :

function listFolderFiles($dir){
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
echo '<li>'.$ff;
if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
echo '</li>';
}
}
echo '</ol>';
}

listFolderFiles('c:/');

nsco_nsco
سه شنبه 09 مهر 1392, 19:18 عصر
سلام ممنونم از پاسختون دوست من من فقط می خوام خود پوشه را نمایش بدهد نه فایل های درونشون رو یعنی هر چی پوشه هست فقط برای اون چ باید کنم ؟ممنونم

nsco_nsco
سه شنبه 09 مهر 1392, 21:36 عصر
سلام دوستان ممنون میشم برای این ماجرا نمایش تنها پوشه ها کمک کنید با تشکر از همه شما

mnvoh90
سه شنبه 09 مهر 1392, 21:48 عصر
خوب اگر منظورتون اینه که subdir های یه دایرکتوری رو به صورت بازگشتی بگیرید و فقط پوشه باشه با یه تغییر کوچیک تو کد AliRezaPro انجام می شه.



function listFolderFiles($dir){
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){

if(is_dir($dir.'/'.$ff))
{
echo '<li>'.$ff;
listFolderFiles($dir.'/'.$ff);
echo '</li>';
}
}
}
echo '</ol>';
}

listFolderFiles('c:/');

nsco_nsco
سه شنبه 09 مهر 1392, 21:55 عصر
سلام ممنونم از پاسختون یک مشکل که داره زمان زیادی در لوکال که تست می کنم طول میکشه و لودر مرورگر چندین ثانیه تا میانه میاد و می ایستد ایا این عادی هست و ایا این مشکل برای کد نیست ؟

mnvoh90
سه شنبه 09 مهر 1392, 22:02 عصر
خواهش می کنم. بستگی به تعداد کل فرزندای اون دایرکتوری داره. مخصوصا که بازگشتی هم هست. اگر فرزندای مساقیمشو می خواستید (که البته بازم بستگی به تعداد داره) زمان کمتری طول می کشه. واسه اینکه مطمئن شیم خروجی کد زیر پیست کنید:


function listFolderFiles($dir){
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){

if(is_dir($dir.'/'.$ff))
{
echo '<li>'.$ff.'@'.microtime();
listFolderFiles($dir.'/'.$ff);
echo '</li>';
}
}
}
echo '</ol>';
}

listFolderFiles('c:/');

nsco_nsco
دوشنبه 22 مهر 1392, 01:43 صبح
سلام دوستان یک سوال اگر بخوام اخرین پوشه را پیدا کنم کدش چی می شود یعنی اخرین پوشه فرزند یعنی فرض کنید ده پوشه در یک دایرکتری هست هر کدوم اینها چند پوشه داخل خودشون دارن دوباره اونها هم به این شکل اخریشون رو بخوام نمایش بدهم ممنون دوستان

MMSHFE
دوشنبه 22 مهر 1392, 10:14 صبح
<?php
function ListLastFolders($dir) {
$folders = scandir($dir);
unset($folders[0], $folders[1]); // Remove . and ..
$flag = true;
foreach($folders as $folder) {
if(is_dir($dir . '/' . $folder)) {
$flag = false;
ListLastFolders($dir . '/' . $folder);
}
}
if($flag) {
echo '<p>' . $dir . '</p>' . PHP_EOL;
}
}
ListLastFolders('C:/xampp/htdocs');
?>

mahmod2000
دوشنبه 22 مهر 1392, 10:36 صبح
اینم من تست کردم که خوب جواب داد


<?php
function ListLastFolders($dir) {
set_time_limit(0);
$folders = scandir($dir);
$explode = array('.','..','.htaccess');
$flag = true;
foreach($folders as $folder) {
if(is_dir($dir . '/' . $folder) && !in_array($folder,$explode)) {
$flag = false;
ListLastFolders($dir . '/' . $folder);
}
}
if($flag) {
echo '<p>' . $dir . '</p>' . PHP_EOL;
}
}
ListLastFolders('E:/xampp/htdocs');
?>

nsco_nsco
دوشنبه 22 مهر 1392, 17:32 عصر
سلام واقعا ممنونم از پاسخ هاتون عالی بود هر دو جواب می دهد فقط یک چیزی این کل ادرس را لیست می کند یعنی ادرس کامل فایل را ایا راهی دارد که تنها قسمتی که در دایرکتوری فایل پی اچ پی هست از اونجا لیست کنه ؟ فرض این هست ادرس C:/xampp/htdocs وقتی لیست می کنه این هم اولش هست ولی نمی خوام باشد ممنون .

MMSHFE
دوشنبه 22 مهر 1392, 19:09 عصر
<?php
function ListLastFolders($dir) {
global $baseDir;
$folders = scandir($dir);
unset($folders[0], $folders[1]); // Remove . and ..
$flag = true;
foreach($folders as $folder) {
if(is_dir($dir . '/' . $folder)) {
$flag = false;
ListLastFolders($dir . '/' . $folder);
}
}
if($flag) {
echo '<p>' . str_replace($baseDir, '', $dir) . '</p>' . PHP_EOL;
}
}
$baseDir = 'E:/xampp/htdocs';
ListLastFolders($baseDir);
?>

nsco_nsco
دوشنبه 22 مهر 1392, 23:03 عصر
سلام ممنونم واقعا از کمکتون اگر بخوام همین ماجرا را برای فایل های موجود درون این اعمال کنم باید چگونه عمل کنم ممنونم

nsco_nsco
دوشنبه 22 مهر 1392, 23:51 عصر
سوال دوم اینه ایا راهی وجود داره که بشه تنها نام فولدر اخر را به دست اورد یعنی این طوری باشه البته دوستان من قبلش بگم یک کاراکتر / اول ادرس اضاف هست که این هم ممنون میشم بگید چطور حذف میشود ادرسه به این شکل است/
New folder (2)/New folder1
می خوام اخرین پوشه فرزند جدا در یک متغییر باشه و بقیه ادرس ما بقی در یک متغییر باید این مهم را چطور انجام بدهم ممنون .

MMSHFE
سه شنبه 23 مهر 1392, 00:16 صبح
اینو ببینید:


<?php
function ListLastFolders($dir) {
global $baseDir;
$folders = scandir($dir);
unset($folders[0], $folders[1]); // Remove . and ..
$flag = true;
foreach($folders as $folder) {
if(is_dir($dir . '/' . $folder)) {
$flag = false;
ListLastFolders($dir . '/' . $folder);
}
}
if($flag) {
$dir = str_replace(trim($baseDir, '/') . '/', '', $dir);
if(strpos($dir, '/') !== false) {
$lastSlashPos = strrpos($dir, '/');
$path = substr($dir, 0, $lastSlashPos);
$dir = substr($dir, $lastSlashPos + 1);
echo '<p><strong>' . $path . '/</strong>' . $dir . '</p>' . PHP_EOL;
}
else {
echo '<p>' . $dir . '</p>' . PHP_EOL;
}
}
}
$baseDir = 'C:/xampp/htdocs';
ListLastFolders($baseDir);
?>

nsco_nsco
سه شنبه 23 مهر 1392, 04:23 صبح
سلام واقعا ممنون هستم وقتی زیر مجموعه زیاد میشه خیلی طول میکشه تا همه رو لیست کنه من سعی کردم تعداد خاصی را فراخوانی کنم اما متاسفانه به خاطر نوع فانکش نشود ایا راهی هست که تعداد خاصی را پیدا کند مثلا 4 فولدر ممنون

MMSHFE
سه شنبه 23 مهر 1392, 09:30 صبح
اینو ببینید چطوره:


<?php
function ListLastFolders($dir, $total) {
global $baseDir;
global $count;
if($count > $total) {
return;
}
$folders = scandir($dir);
unset($folders[0], $folders[1]); // Remove . and ..
$flag = true;
foreach($folders as $folder) {
if(is_dir($dir . '/' . $folder)) {
$flag = false;
ListLastFolders($dir . '/' . $folder, $total);
}
}
if($flag) {
$dir = str_replace(trim($baseDir, '/') . '/', '', $dir);
$count++;
if(strpos($dir, '/') !== false) {
$lastSlashPos = strrpos($dir, '/');
$path = substr($dir, 0, $lastSlashPos);
$dir = substr($dir, $lastSlashPos + 1);
echo '<p><strong>' . $path . '/</strong>' . $dir . '</p>' . PHP_EOL;
}
else {
echo '<p>' . $dir . '</p>' . PHP_EOL;
}
}
}
$baseDir = 'C:/xampp/htdocs';
$count = 0;
ListLastFolders($baseDir, 4);
?>