Good day to you all,
I have a problem of maximum execution time over an directory listing.
1. Is there a way to do this faster ?2. Or is it a setting on my server ? isn’t the default 30 seconds.3. I’m working with a lot of files !4. Is there a better way of doing this?
Error :
[I]Fatal error: Maximum execution time of 30 seconds exceeded in Photos_galleryupdate_menu.php on line 27
Code :
[code=php]
<?php
$directory = “Art/”;
function dirList ($directory)
{
//create 2 arrays – one for folders and one for files
$folders = array();
$files = array();
// create a handler for the directory
$handler = opendir($directory);
// keep going until all files in directory have been read
while (false !== ($file = readdir($handler))) {
// if $file isn’t this directory or its parent,
// add it to the results array
if ($file != ‘.’ && $file != ‘..’)
// If file is directory, mark it in bold.
if(is_dir($directory.$file)) {
array_push($folders,$file);
if (time() – filemtime($directory.$file) < 604800) {
$folder_modified[] = “<span style=”color:#DB1212;”><li><div class=”folder”><img src=”plus_icon.gif” onclick=”Toggle(‘”.preg_replace(‘///’,’_’,$directory.””.$file).”‘); return false;” /><b>”.$file.”</b></div>”;
} elseif (time() – filemtime($directory.$file) < 31556926) {
$folder_modified[] = “<span style=”color:#003366;”><li><div class=”folder”><img src=”plus_icon.gif” onclick=”Toggle(‘”.preg_replace(‘///’,’_’,$directory.””.$file).”‘); return false;” /><b>”.$file.”</b></div>”;
} else {$folder_modified[] = “<span style=”color:#000000;”><li><div class=”folder”><img src=”plus_icon.gif” onclick=”Toggle(‘”.preg_replace(‘///’,’_’,$directory.””.$file).”‘); return false;” /><b>”.$file.”</b></div>”;}
// Else not styled
}else{
array_push($files,$file);
$filenamecor = substr($file, 0, -4);
if (time() – filemtime($directory.$file) < 604800) {
$file_modified[] = ‘<span style=”color:#DB1212;”>’.$filenamecor.'<span>’;
} elseif (time() – filemtime($directory.$file) < 31556926) {
$file_modified[] = ‘<span style=”color:#003366;”>’.$filenamecor.'<span>’;
} else {$file_modified[] = ‘<span style=”color:#000000;”>’.$filenamecor.'<span>’;}
}
}
echo “<ul id=””.preg_replace(‘///’,’_’,substr($directory,0,strlen($directory)-1)).””>n”; //start a new unordered list for every iteration through dirList
$dircor = $directory;
// tidy up: close the handler
closedir($handler);
foreach($folders as $folder=>$file) {
echo “<li><div class=”folder”>”.$folder_modified[$folder].”</div>”; //echo the folder name enclosed in a list item
dirList($directory.$file.’/’); //loop through the contents of $folder
echo “</li>n”; //close this list item after all files and folders in $folder have been looped through
}
foreach($files as $key=>$file) {
echo “<li><a href=”index.html” onclick=”load(‘image_view.php?dir=”.$dircor.”&file=”.$file.”‘,’boxdisp’);return false;”> ”.$file_modified[$key].”</a></li>n”; //echo the file name enclosed in a list item
}
echo “</ul>n”; //close the unordered list
}
$filename = ‘menu.html’;
$somecontent = dirList($directory);
// Let’s make sure the file exists and is writable first.
if (is_writable($filename)) {
// In our example we’re opening $filename in append mode.
// The file pointer is at the bottom of the file hence
// that’s where $somecontent will go when we fwrite() it.
if (!$handle = fopen($filename, ‘a’)) {
echo “Cannot open file ($filename)”;
exit;
}
// Write $somecontent to our opened file.
if (fwrite($handle, $somecontent) === FALSE) {
echo “Cannot write to file ($filename)”;
exit;
}
echo “Success, wrote ($somecontent) to file ($filename)”;
fclose($handle);
} else {
echo “The file $filename is not writable”;
}
What I’m trying to do is list a directory recurcively and write the result in a html page.
So it faster to load for user
to get it content later from the photos gallery page the user will only see..