Re: Re: Directory Listing
| From: | hack988 hack988 | Date: | Wed, 26 Aug 2009 15:44:30 +0000 |
| Subject: | Re: Re: Directory Listing | ||
| References: | 1 2 3 4 5 6 7 8 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-297288@lists.php.net to get a copy of this message | ||
use realpath is better that i think
2009/8/26 Steve <admin@ultramegatech.com>:
> Ashley Sheridan wrote:
>>
>> On Wed, 2009-08-26 at 09:50 +0100, Tom Chubb wrote:
>>
>>>
>>> 2009/8/26 Ashley Sheridan <ash@ashleysheridan.co.uk>:
>>>
>>>>
>>>> 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
>
>