ABA


"עזרה בגיור קוד ערבי ;-), סקריפט לרשימת תיקיות"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #15198 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15198
code_blue  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.7.06
21280 הודעות, 7 פידבק, 14 נקודות
   08:40   27.07.09   
אל הפורום  
  עזרה בגיור קוד ערבי ;-), סקריפט לרשימת תיקיות  
 
   אהלן,
בניתי סקריפט (שעובד) שיציג לי רשימת תיקיות עם אפשרות של כניסה לתתי תיקיות וחזרה לתיקיית הROOT .

אשמח אם תעזרו לי להכין משהו קצת יותר מקצועי, זה יצא כאילו איזה מתכנת מטייבה שהוא בכלל מוכר בשוק כתב את זה.
(לא שאני מזלזל בטייביאנים .. )
הבעייה העיקרית היא שמדובר על תיקייה שלא קשורה לROOT מאיפה שהקובץ מופעל.



<?php
$pt=$_GET;
if($pt)
{
$org_path=$_GET;
$last=explode("\\",$org_path);
$co=count($last)-2;

for($c=0;$c<$co;$c++)
{
$last1.=$last."\\";
}
$co++;
$last1.=$last;
}
else
$org_path='c:\www';
$org='c:\WWW';
?>
<table>
<tr><td>File Name</td><td>type</td></tr>
<?php
if ($org_path!=$org) echo "<tr><td><a href=\"?ndir=$last1\">UP</a></td><td>UP</td></tr>";
function listing($path)
{
$myDirectory = opendir("$path");
while($file = readdir($myDirectory))
{
if ($file!='.' && $file!='..')
{
$npath="$path\\$file";
if (is_dir("$npath"))
echo "<tr><td><a href='?ndir=$path\\$file'>$file</a></td><td>dir</td></tr>" ;
else
echo "<tr><td>$file</td><td>file</td></tr>" ;
}
}
closedir($myDirectory);
}
listing($org_path);
?>
</table>



                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא הספקתי להסתכל על הקוד, אבל הבעיה שציינת asco88  27.07.09 12:36 1
     הרעיון הוא לא רק להציג code_blue  27.07.09 13:23 2
         הכנתי לך משו קטן:S akoka 27.07.09 14:17 3
         הממ משהו בסגנון הזה? asco88  27.07.09 15:04 4
             שוב אני צריך נתיב מלא code_blue  27.07.09 17:44 5
             לא עבד לי ;-(... code_blue  27.07.09 19:36 6

       
asco88 
חבר מתאריך 17.6.04
26757 הודעות, דרג אמינות חבר זה
   12:36   27.07.09   
אל הפורום  
  1. לא הספקתי להסתכל על הקוד, אבל הבעיה שציינת  
בתגובה להודעה מספר 0
 
ערכתי לאחרונה בתאריך 27.07.09 בשעה 13:41 בברכה, asco88
 
תיפתר ע"י הפונקציה
getcwd()

שמחזירה את התיקייה הנוכחית.
בקשר לשאר אני אחזור אליך בקרוב.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
code_blue  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.7.06
21280 הודעות, 7 פידבק, 14 נקודות
   13:23   27.07.09   
אל הפורום  
  2. הרעיון הוא לא רק להציג  
בתגובה להודעה מספר 1
 
   זה פונקצייה התחלתית

הרעיון הוא שעם הנתיב המלא יהיה אפשרי להציג וידאו
לכן אני צריך נתיב אבסולוטי ולא רק שיציג לי איזה קבצים יש שם .


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   14:17   27.07.09   
אל הפורום  
  3. הכנתי לך משו קטן:S  
בתגובה להודעה מספר 2
 
   התעוררתי ראיתי את האשכול והיה לי משעמם.

שיפורים אפשריים

1.מיון המערכים של Folders/Files עם sort יעלה לך O(n log n).
במקרה הגרוע אם המערך ממויין כבר יעלה לך n^2.

2.בדיקה כמה עולה לך array_key_exists אני חושב שזה O(1) כי מקבלים אינדקס שהוא מצביע לKey של המערך.
במקסימום יעלה לך O של n.

זהו אין לי עוד רעיונות לשיפור, זה הקוד.


<?php
function TreeList($root = null,$useThisFileRoot = false)
{
if ($useThisFileRoot) $root = dirname(__FILE__);

$handle = opendir($root);

if (!$handle) return false;

while ($f = readdir($handle))
{
if ($f != '.' && $f != '..'){
if (is_dir($f)) $array['folders'][] = $f;
else $array['files'][] = $f;
}
}

return $array;
}

function PrintTree(array $array)
{
if (array_key_exists("folders",$array)){

$folder_size = sizeof($array["folders"]);

for ($i = 0; $i < $folder_size; ++$i)
echo "<a href=\"index.php?f=".base64_encode($array["folders"][$i])."\">".$array["folders"][$i]."</a>";
}

if (array_key_exists("files",$array)){

$files_size = sizeof($array["files"]);

for ($i = 0; $i < $files_size; ++$i)
echo "<div class=\"file\">".$array["files"][$i]."</div>";

}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Tree Folders</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
a { color: black; font: normal bold 12px Arial}
div.file{ font: normal normal 13px Arial}
</style>
</head>
<body>
<?php
$getFolder = (isset($_GET['f']))?base64_decode($_GET['f']):null;
$treeList = (isset($getFolder))?TreeList($getFolder,false):TreeList(null,true);
PrintTree($treeList);
?>
</body>
</html>

עוד משהו קטן, קידדתי את שם התיקיות בקישור בbase64_encode זה הרבה יותר בטוח לדעתי מאשר להעביר את שם התיקיה עצמה בתור קישור.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות, דרג אמינות חבר זה
   15:04   27.07.09   
אל הפורום  
  4. הממ משהו בסגנון הזה?  
בתגובה להודעה מספר 2
 

<?php
if (isset($_GET))
{
if (is_dir($_GET))
chdir($_GET);
else
echo "Current File: ",$_GET,"<br>";
}

$myDir=getcwd();
$currentDir=getcwd();
$myFile=$myDir."\\try.php";

echo "Your current folder is: ",$myDir,"<br><br>";


$myList=scandir($myDir);
$listLangth=count($myList);

echo "Files in the current folder:<br>";
foreach ($myList as $file)
{
echo "<div>";
echo "<div><a href=http://localhost/folders/try.php?task=",$file,">",$file,"</a></div>";
echo "<div>";
if (is_dir($file))
echo "DIR <br>";
else
echo "FILE <br>";
echo "</div>";
}
?>

זה פועל טוב, השאלה היא מה אתה מעוניין לעשות עם קובץ שהגעת אליו?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
code_blue  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.7.06
21280 הודעות, 7 פידבק, 14 נקודות
   17:44   27.07.09   
אל הפורום  
  5. שוב אני צריך נתיב מלא  
בתגובה להודעה מספר 4
 
   כי אני הולך לשלוח את הנתיב לסקריפט שיפעיל חלון וידאו של מדייה פלייר


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
code_blue  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.7.06
21280 הודעות, 7 פידבק, 14 נקודות
   19:36   27.07.09   
אל הפורום  
  6. לא עבד לי ;-(...  
בתגובה להודעה מספר 4
 
   אבל עשיתי חדש ..

<?php
$myDir="c:\www";
if(isset($_GET['n']))
{
$myDir=$_GET['n'];
}
echo "Your current folder is: ",$myDir,"<br><br>";
$myList=scandir($myDir);
foreach ($myList as $file)
{
$npath=$myDir."\\".$file;
if(is_dir($npath))
$dirs[]=$npath;
else
$files[]=$npath;
}
sort($dirs);
sort($files);
?>

<table>
<tr><td>NAME </td></tr>
<tr><td><a href="javascript:history.back()"> UP</a></td></tr>
<?php
foreach($dirs as $dir)
{
$dir1=explode('\\',$dir);
$c=count($dir1)-1;
$dir2=$dir1[$c];
if ($dir2!='.' AND $dir2!='..')
echo "<tr><td><a href='?n=$dir'>$dir2</a></td></tr>";
}
foreach($files as $file1)
{
$filess=explode('\\',$file1);
$c=count($filess)-1;
$file2=$filess[$c];
echo "<tr><td><a href='?n=$file1'>$file2</a></td></tr>";

}
?>
</table>


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net