PDA

View Full Version : سوال: چرا نمی تونم به کمک یک اسکریپت و از داخل یک پوشه، پوشه های دیگه رو باز کنم و محتویاتش رو بخونم؟



phpweb
سه شنبه 26 بهمن 1389, 12:11 عصر
من یه کد نوشتم که بتونم فایلها رو توی سایت آپلود کنم و محتویاتش رو بخونم اما وقتی می خوام محتویات سایر پوشه هایی که اسکریپت تو اون پوشه ها قرار نداره رو بخونم ، محتویات پوشه ها نمایش داده نمی شن. بنظر شما چه مشکلی هست؟

این کدی که استفاده می کنم.


$path'./all/';
$opendir = opendir($path);
while ($readdir = readdir($opendir))
{
if(is_dir($readdir) && $readdir!='.' )
{
echo '<div class="show_file">';
echo "$readdir".'<br />';
echo '</div>';
}
}

MMSHFE
سه شنبه 26 بهمن 1389, 13:16 عصر
با سلام، دوست گرامي بايد ابتدا با استفاده از /.. به تعداد لازم به سمت پوشه هاي والد حركت كنيد و بعد به پوشه موردنظر خودتون برين. فرض كنيد كد توي پوشه public_html/scripts و فايلها توي پوشه public_html/all قرار دارن. كدتون بدين ترتيب خواهد بود:

$path='../all';
$opendir=opendir($path);
while ($file=readdir($opendir))
{
if(is_dir($file) && $file!='.' && $file!='..')
{
echo '<div class="show_file">';
echo "$file".'<br />';
echo '</div>';
}
}
البته اين كد، فهرست پوشه ها رو نشون ميده. براي نمايش فايلها بايد به جاي is_dir از is_dir! استفاده كنيد.
موفق و مؤيد باشيد.

phpweb
سه شنبه 26 بهمن 1389, 20:29 عصر
با سلام، دوست گرامي بايد ابتدا با استفاده از /.. به تعداد لازم به سمت پوشه هاي والد حركت كنيد و بعد به پوشه موردنظر خودتون برين. فرض كنيد كد توي پوشه public_html/scripts و فايلها توي پوشه public_html/all قرار دارن. كدتون بدين ترتيب خواهد بود:

$path='../all';
$opendir=opendir($path);
while ($file=readdir($opendir))
{
if(is_dir($file) && $file!='.' && $file!='..')
{
echo '<div class="show_file">';
echo "$file".'<br />';
echo '</div>';
}
}البته اين كد، فهرست پوشه ها رو نشون ميده. براي نمايش فايلها بايد به جاي is_dir از is_dir! استفاده كنيد.
موفق و مؤيد باشيد.
اسکریپت شما رو تست کردم ولی جواب نداد.

فرض کنید که اسکریپت توی پوشه all قرار داره و یه پوشه به نام other هم توی این پوشه وجود داره و ما می خوایم محتویات این پوشه رو نمایش بدیم، در این حالت کد به چه شکل در می یاد؟

amir001
سه شنبه 26 بهمن 1389, 21:11 عصر
اگر درست متوجه شده باشم.
اگر پوشه ی othe کنار فایل اسکریپتت هست اینجوری:

./other

phpweb
چهارشنبه 27 بهمن 1389, 00:17 صبح
اگر درست متوجه شده باشم.
اگر پوشه ی othe کنار فایل اسکریپتت هست اینجوری:

./other

مشکل من هم همینجاست. این روشی که شما گفتید رو چک کردم ولی جواب نگرفتم. اسکریپت فقط فایلها و دایرکتوری هایی رو نشون می ده که کنار خودش هستن. محتویات سایر پوشه ها رو نمایش نمی ده. این اسکریپتی هست که استفاده می کنم:

$path='./all/';
$opendir = opendir($path);
while ($readdir = readdir($opendir))
{
if(is_dir($readdir) && $readdir!='.' )
{
echo '<div class="show_file">';
echo "$readdir".'<br />';
echo '</div>';
}
}

MMSHFE
چهارشنبه 27 بهمن 1389, 08:57 صبح
با سلام، اين كد رو امتحان كنيد:


$path='other';
$opendir=opendir($path);
while ($file=readdir($opendir))
{
if(is_dir($file) && $file!='.' && $file!='..')
{
echo '<div class="show_file">';
echo "$file".'<br />';
echo '</div>';
}
}

براي مسيرهاي فرعي داخل مسير جاري نياز نيست حتماً . رو ذكر كنيد.
البته ميشه اينطوري هم عمل كرد:


$path=__DIR__.'/other';
$opendir=opendir($path);
while ($file=readdir($opendir))
{
if(is_dir($file) && $file!='.' && $file!='..')
{
echo '<div class="show_file">';
echo "$file".'<br />';
echo '</div>';
}
}

موفق و مؤيد باشيد.

phpweb
چهارشنبه 27 بهمن 1389, 12:06 عصر
با سلام، اين كد رو امتحان كنيد:


$path='other';
$opendir=opendir($path);
while ($file=readdir($opendir))
{
if(is_dir($file) && $file!='.' && $file!='..')
{
echo '<div class="show_file">';
echo "$file".'<br />';
echo '</div>';
}
}
براي مسيرهاي فرعي داخل مسير جاري نياز نيست حتماً . رو ذكر كنيد.
البته ميشه اينطوري هم عمل كرد:


$path=__DIR__.'/other';
$opendir=opendir($path);
while ($file=readdir($opendir))
{
if(is_dir($file) && $file!='.' && $file!='..')
{
echo '<div class="show_file">';
echo "$file".'<br />';
echo '</div>';
}
}
موفق و مؤيد باشيد.

هر روشی رو که گفته شد تست کردم ولی جواب نداد تا اینکه تصمیم گرفتم که کد زیر رو تست کنم. بعد از تست این کد مشخص شد که تابع is_dir باعث مشکل شده.

توی این کد می بینیم که اگر از تابع is_dir استفاده نکنیم، همه محتویات پوشه مورد نظر نمایش داده می شه.

لطفا بگید که چرا تابع is_dir باعث ایجاد مشکل شده و چطور می تونم توی کد تفاوت بین فایل و دایرکتوری رو مشخص کنم؟



<?php
$path='./all';
$opendir=opendir($path);

while ($file=readdir($opendir))
{

echo '<div class="show_file">';
echo "$file".'<br />';
echo '</div>';

}

?>

MMSHFE
چهارشنبه 27 بهمن 1389, 13:20 عصر
با سلام، تابع is_dir فقط وقتي ارزش true داره كه پارامتر ورودي اون، يك دايركتوري (فولدر) باشه. همونطور كه گفتم اگه بخواين فايلها رو نمايش بدين (نه پوشه ها)، بايد قبل از اين تابع يك ! اضافه كنيد تا نتيجه اون برعكس بشه.
موفق و مؤيد باشيد.

phpweb
چهارشنبه 27 بهمن 1389, 15:06 عصر
با سلام، تابع is_dir فقط وقتي ارزش true داره كه پارامتر ورودي اون، يك دايركتوري (فولدر) باشه. همونطور كه گفتم اگه بخواين فايلها رو نمايش بدين (نه پوشه ها)، بايد قبل از اين تابع يك ! اضافه كنيد تا نتيجه اون برعكس بشه.
موفق و مؤيد باشيد.

شما بطور کامل متن پیام قبلی رو مطالعه نکردید.

وقتی می خوام محتویات یه پوشه رو نمایش بدم، وقتی از تابع is_dir استفاده می کنم محتویات (پوشه ها و فایلها) نمایش داده نمی شن، ولی وقتی این تابع رو حذف می کنم محتویات نمایش داده می شن.

بنظر شما مشکل کار کجاست؟

MMSHFE
شنبه 30 بهمن 1389, 08:16 صبح
با سلام، اتفاقاً دوست گرامي متن پيام رو به دقت خوندم. ببينيد، در كد شما، opendir$ پوشه موردنظر هست نه file$ و is_dir كه نوشتين، متغير file$ رو بررسي ميكنه، درنتيجه فقط وقتي اون رو نمايش ميده كه يك پوشه باشه نه يك فايل (يعني فقط پوشه هاي موجود در opendir$ رو نشون ميده) و چون پوشه هاي . و .. رو درنظر نگرفتين (كه به ترتيب به پوشه جاري و پوشه والد اشاره ميكنن)، فقط ساير پوشه هاي موجود در opendir$ باقي ميمونه. براي امتحان، يك پوشه خالي داخل اين پوشه ايجاد كنيد و خواهيد ديد كه اسمش چاپ ميشه. اگه بخواين محتويات اون رو هم نشون بدين، بايد از روش بازگشتي استفاده كنيد. موفق و مؤيد باشيد.