Peuplarchie Posted May 4, 2009 Share Posted May 4, 2009 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 : Fatal error: Maximum execution time of 30 seconds exceeded in Photos_gallery\update_menu.php on line 27 Code : <?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.. Link to comment https://forums.phpfreaks.com/topic/156796-30-maximum-execution-time/ Share on other sites More sharing options...
premiso Posted May 4, 2009 Share Posted May 4, 2009 set_time_limit should work, but know that a browser may timeout without data being sent to the screen. But give that a try and see if it works for you. Link to comment https://forums.phpfreaks.com/topic/156796-30-maximum-execution-time/#findComment-825772 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.