Re: Re: Directory Listing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ashley Sheridan wrote:
On Wed, 2009-08-26 at 09:50 +0100, Tom Chubb wrote:
2009/8/26 Ashley Sheridan <ash@xxxxxxxxxxxxxxxxxxxx>:
On Tue, 2009-08-25 at 17:08 +0100, Tom Chubb wrote:
I've been playing about more and now I have the following code:

<?
error_reporting(E_ALL);
ini_set('display_errors', true);

function getDirectory($path = '.', $ignore = '') {
    $dirTree = array ();
    $dirTreeTemp = array ();
    $fileDate = array ();
    $ignore[] = '.';
    $ignore[] = '..';
    $dh = @opendir($path);
    while (false !== ($file = readdir($dh))) {
        if (!in_array($file, $ignore)) {
            if (!is_dir("$path/$file")) {
                $dirTree["$path"][] = $file;
                $fileDate["$file"][] = date ("d/m/Y",
filemtime("$path/$file"));
            } else {
                $dirTreeTemp = getDirectory("$path/$file", $ignore);
                if (is_array($dirTreeTemp))$dirTree =
array_merge($dirTree, $dirTreeTemp, $fileDate);
            }
        }
    }
    closedir($dh);
    return $dirTree;
}

$ignore = array('.htaccess', 'Thumbs.db', 'index.php');
$dirTree = getDirectory('.', $ignore);
getdirectory('.');

echo "Gatwick Tender Documents\n";

foreach( $dirTree as $key => $folder ){
   echo "\n"; //Don't need folders as they're shown with the files
   foreach( $folder as $file){
       echo str_replace("./", "", $key) . "\t" . $file . "\t\n"; //Pad
out with a tab for easy import into excel

   }
}
print_r($dirTree); //Just using this for debugging
?>


The output is fine for the paths and filenames but I still can't get
the dates showing. It's getting the correct date for some but not all.
I did something else earlier and found that all the dates were
01/01/1970 but at least there was a date for every file but can't
remember how I go there!


Here is a sample output result:

Gatwick Tender Documents

.     9216_100_REV_V1.0_bound.dwg

Tender Docs   BAA Works Terms v1.1 (22.05.08).pdf
Tender Docs   Contents of Volumes 1 and 2.pdf
Tender Docs   Cover Letter and Instructions.doc
Tender Docs   Form of Tender.doc

Tender Docs/Health and Safety Questionnaire   NT Baggage Tender
Questionaire rev2.xls

BAA Works Terms v1.1 (22.05.08).pdf   29/07/2009

Contents of Volumes 1 and 2.pdf       29/07/2009

Cover Letter and Instructions.doc     29/07/2009

Form of Tender.doc    29/07/2009

Tender Docs/NTB BH Lighting   3J-B-1 PIR.xls
Tender Docs/NTB BH Lighting   3J-B-2B PIR.xls
Tender Docs/NTB BH Lighting   3J-B-2R PIR.xls
Tender Docs/NTB BH Lighting   3J-B-3R PIR.xls
Tender Docs/NTB BH Lighting   3J-D PIR.xls
Tender Docs/NTB BH Lighting   4G-G PIR.xls
Tender Docs/NTB BH Lighting   4J-B-1B PIR.xls
Tender Docs/NTB BH Lighting   4J-B-1R PIR.xls
Tender Docs/NTB BH Lighting   4J-B-2B PIR.xls
Tender Docs/NTB BH Lighting   4J-B-2R PIR.xls
Tender Docs/NTB BH Lighting   4J-B-4 PIR.xls
Tender Docs/NTB BH Lighting   5G-G PIR.xls


Can anyone shed any light on it?
I'm about to admit defeat!

Thanks in advance and I'm not being lazy - I really am trying!!! :(

Tom

The only time I've ever noticed this problem was on a 32bit system where
the files were above 2GB each. When the files are that size, none of the
information functions seem to work correctly, including the filesize,
date, etc.

Thanks,
Ash
http://www.ashleysheridan.co.uk




Cheers Ash,
I read that too, but I was getting the error for over 90% of the files
which I know are generally only a few MB.
I've started from scratch again and come up with something that is
easier to deal with but still having one last problem!

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
function directoryToArray($directory, $recursive) {
	$array_items = array();
	if ($handle = opendir($directory)) {
		while (false !== ($file = readdir($handle))) {
			if ($file !="index.php" && $file != "." && $file != "..") {
				if (is_dir($directory. "/" . $file)) {
					//For Directories
					if($recursive) {
						$array_items = array_merge($array_items,
directoryToArray($directory. "/" . $file, $recursive));
					}
					$fullfile = $directory . "/" . $file;
					$array_items[] = preg_replace("/\/\//si", "/", $fullfile);
				} else {
					//For Files
					$fullfile = $directory . "/" . $file;
					$array_items[] = preg_replace("/\/\//si", "/", $fullfile);
				}
			}
		}
		closedir($handle);
	}
	return $array_items;
}

$files = directoryToArray("./Tender", true);


//Output to browser
foreach ($files as $file) {
	echo str_replace("./Tender", "", $file) . "\t" . "	" . date ("d/m/Y",
filemtime($file)) . "\n";
}
//print_r($files);
?>


The output I'm getting is:
/9216_100_REV_V1.0_bound.dwg		05/08/2009
/Tender Docs/BAA Works Terms v1.1 (22.05.08).pdf		29/07/2009
/Tender Docs/Contents of Volumes 1 and 2.pdf		29/07/2009
/Tender Docs/Cover Letter and Instructions.doc		29/07/2009
/Tender Docs/Form of Tender.doc		29/07/2009
/Tender Docs/Health and Safety Questionnaire/NT Baggage Tender
Questionaire rev2.xls		29/07/2009
/Tender Docs/Health and Safety Questionnaire		14/08/2009
/Tender Docs/NTB BH Lighting/3J-B-1 PIR.xls		13/05/2009
/Tender Docs/NTB BH Lighting/3J-B-2B PIR.xls		13/05/2009
/Tender Docs/NTB BH Lighting/3J-B-2R PIR.xls		13/05/2009
/Tender Docs/NTB BH Lighting/3J-B-3R PIR.xls		13/05/2009
/Tender Docs/NTB BH Lighting/3J-D PIR.xls		13/05/2009

All I need to do now is get a tab between the filename & the path
I'm thinking I need to explode on the "/" and somehow match the last
value but stumped at the moment!


Tom

You could do a substr on $file:

$filename = substr($file, strrpos('/')+1);
$directory = substr($file, 0, strlen($file) - strrpos('/'));

I've not tested that, so you might need to adjust slightly a character
position here or there.

Thanks,
Ash
http://www.ashleysheridan.co.u
It might make more sense to use the basename and dirname functions for that. Though you will probably still run into the misplaced tabs if your paths don't have trailing slashes. At least it's cleaner.

$filename = basename($file);
$directory = dirname($file);

http://www.php.net/manual/function.basename.php
http://www.php.net/manual/function.dirname.php

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux