= strlen(CFG_THUMBNAIL_FILENAME_SUFFIX)) { if (substr($filename_base, strlen($filename_base) - strlen(CFG_THUMBNAIL_FILENAME_SUFFIX)) == CFG_THUMBNAIL_FILENAME_SUFFIX) return FALSE; } //Looks good. return TRUE; } //-------------------------------------------------------------------------------- //As a function of the file name, creates the file name for the thumbnail. function file_name_to_thumbnail_name($in_filename) { $extension_start = strrpos($in_filename, "."); //Find position of last "." in string. This should precede the //file extension. if ($extension_start === FALSE) { //"." not found. Should not happen. Filenames were checked in advance. echo "Fatal internal error at line " . __LINE__ . "\n"; exit(1); } $filename_prefix = substr($in_filename, 0, $extension_start); $filename_extension = substr($in_filename, $extension_start); $rv = $filename_prefix . CFG_THUMBNAIL_FILENAME_SUFFIX . $filename_extension; return $rv; } //-------------------------------------------------------------------------------- //Writes the index file preamble to the index file. This is very much //dependent on how the thumbnails will be used. This is currently customized //for what Dave Ashley does. function write_index_file_preamble($handle, $idstring) { fwrite($handle, "<" . "?" . "php\n"); fwrite($handle, "require_once(\"style/std/stdwpstyle.inc\");\n"); fwrite($handle, "?" . ">" . "\n"); fwrite($handle, "<" . "?" . "php\n"); fwrite($handle, " $" . "thispage = new StdWpStyle();\n"); fwrite($handle, "\n"); fwrite($handle, " $" . "thispage->static_page_header_title_std(\"" . $idstring . "\",\n"); fwrite($handle, " \"" . $idstring . "\",\n"); fwrite($handle, " \"\");\n"); fwrite($handle, " $" . "thispage->static_page_photo_thumbnail_explanation(TRUE, TRUE);\n"); fwrite($handle, "?" . ">" . "\n"); for ($i = 0; $i < CFG_INDEX_PARAGRAPH_INDENT; $i++) { fwrite($handle, " "); } fwrite($handle, "\n

\n"); } //-------------------------------------------------------------------------------- //Writes the index file postamble to the index file. This is very much //dependent on how the thumbnails will be used. This is currently customized //for what Dave Ashley does. function write_index_file_postamble($handle) { for ($i = 0; $i < CFG_INDEX_PARAGRAPH_INDENT; $i++) { fwrite($handle, " "); } fwrite($handle, "

\n\n"); fwrite($handle, "<" . "?" . "php\n"); fwrite($handle, " $" . "thispage->static_page_footer_std();\n"); fwrite($handle, "?" . ">" . "\n"); } //-------------------------------------------------------------------------------- //Writes a line to the index file corresponding to a linked larger picture //reprsented by a thumbnail. function write_index_line( $handle, $filename, $thumbnailname, $filename_filesize, $filename_xdim, $filename_ydim, $thumbnailname_filesize, $thumbnailname_xdim, $thumbnailname_ydim) { //dscn1258.jpg (4932338 bytes) //Indent. for ($i = 0; $i < CFG_INDEX_LINK_INDENT; $i++) { fwrite($handle, " "); } fwrite($handle, "\"");"); fwrite($handle, "\n"); } //-------------------------------------------------------------------------------- //Write introductory message. hor_line_thick(); echo CFG_PROGNAME . " Copyright (C) 2015 David T. Ashley\n"; echo "This program comes with ABSOLUTELY NO WARRANTY; and is licensed under\n"; echo "the GNU General Public License, Version 3. A copy of this license is\n"; echo "provided in the source code of this program.\n"; hor_line_thin(); //----------------------------------------------------------------------------- //Get the date, time, and PID strings that will be used for the rest of the //script. $scr_datestring = date("Ymd_His"); $scr_pid = getmypid(); if ($scr_pid === FALSE) $scr_pid = 0; //----------------------------------------------------------------------------- //If the index file exists, rename it out of the way. This is to prevent //the loss of information. if (file_exists(CFG_INDEXFILE_NAME)) { rename(CFG_INDEXFILE_NAME, $scr_datestring . "_" . $scr_pid . ".php"); } //----------------------------------------------------------------------------- //Open the index file and write the preamble. $indexfile_handle = fopen(CFG_INDEXFILE_NAME, "w"); if ($indexfile_handle === FALSE) { echo "FATAL: unable to open index file.\n"; exit(1); } write_index_file_preamble($indexfile_handle, $scr_datestring . "_" . $scr_pid); //----------------------------------------------------------------------------- //Get and emit the names of everything in the directory. $file_list = get_file_names_in_dir(); if ($file_list === FALSE) { echo "List of files from PHP function scandir() is empty.\n"; echo "Serious internal error, or nothing to do. Script cannot continue.\n"; hor_line_thick(); exit(1); } else { echo "Files in working directory (unsorted, unfiltered, " . count($file_list) . " files):\n"; for ($i = 0; $i < count($file_list); $i++) echo " " . sprintf("[%5d]", $i) . " " . $file_list[$i] . "\n"; } hor_line_thin(); //----------------------------------------------------------------------------- //Remove the standard directory entries "." and ".." from the list, and //remove any directories. $temp_list = $file_list; unset($file_list); $n = 0; for ($i = 0; $i < count($temp_list); $i++) { //echo "Checking " . $temp_list[$i] . "\n"; if (strcmp($temp_list[$i], ".") == 0) { //. entry, not a file. } else if (strcmp($temp_list[$i], "..") == 0) { //.. entry, not a file. } else if (is_file($temp_list[$i])) { //This is a regular file. $file_list[] = $temp_list[$i]; $n++; } } if ($n == 0) $file_list = FALSE; unset($n); unset($temp_list); //----------------------------------------------------------------------------- //If there is nothing to do, end the script. if ($file_list === FALSE) { echo "No files to process.\n"; hor_line_thick(); exit(0); } //----------------------------------------------------------------------------- //Sort the list. This is a non-event. The only rationale for sorting is that //it ensures that the same set of files will be processed in the same order, //regardless of the order provided by the underlying OS internals. sort($file_list); //----------------------------------------------------------------------------- //Emit the names we now have. echo "Files in working directory (directory entries removed, sorted, " . count($file_list) . " files):\n"; for ($i = 0; $i < count($file_list); $i++) echo " " . sprintf("[%5d]", $i) . " " . $file_list[$i] . "\n"; hor_line_thin(); //----------------------------------------------------------------------------- //For each file in the list, process it. There are different processing //actions for each one. for ($i = 0; $i < count($file_list); $i++) { if (is_full_sized_image_file_name($file_list[$i])) { $thumbnail_name = file_name_to_thumbnail_name($file_list[$i]); $image_data = getimagesize($file_list[$i]); $thumbnail_data = getimagesize($thumbnail_name); write_index_line( $indexfile_handle, $file_list[$i], $thumbnail_name, filesize($file_list[$i]), $image_data[0], $image_data[1], filesize($thumbnail_name), $thumbnail_data[0], $thumbnail_data[1]); } } //----------------------------------------------------------------------------- //Complete and close up the index file. write_index_file_postamble($indexfile_handle); fclose($indexfile_handle); // $i = 0; // $completed = 0; // while (($completed < CFG_MAX_THUMBNAILS_PER_INVOCATION) && ($i < count($file_list))) // { // if (is_full_sized_image_file_name($file_list[$i])) // { // $thumbnail_name = file_name_to_thumbnail_name($file_list[$i]); // // if (file_exists($thumbnail_name)) // { // echo " " . sprintf("[%5d]", $i) . " " . $file_list[$i] . " : skipping because corresponding thumbnail exists.\n"; // hor_line_thin(); // } // else // { // echo " " . sprintf("[%5d]", $i) . " " . $file_list[$i] . " : creating thumbnail.\n"; // // echo "Creating thumbnail \"" . // $thumbnail_name . // "\" from image \"" . // $file_list[$i] . // "\".\n"; // // create_thumbnail($file_list[$i], // $thumbnail_name, // $filename_filesize, // $filename_xdim, // $filename_ydim, // $thumbnail_filesize, // $thumbnail_xdim, // $thumbnail_ydim); // // echo "Conversion complete.\n"; // echo " Full-sized image file size/xdim/ydim = " . // $filename_filesize . "/" . $filename_xdim . "/" . $filename_ydim . // ",\n"; // echo " Thumbnail image filesize/xdim/ydim = " . // $thumbnail_filesize . "/" . $thumbnail_xdim . "/" . $thumbnail_ydim . // ",\n"; // // hor_line_thin(); // $completed++; // } // } // else // { // //Unsuitable base name. Can't use it. // echo " " . sprintf("[%5d]", $i) . " " . $file_list[$i] . " : skipping due to unsuitable name.\n"; // hor_line_thin(); // } // // $i++; // } // // //Emit a message about whether the program should be run again. I am aware of // //the uncovered case--where the last thumbnail was made on the last iteration // //of this invocation--but I will leave it uncovered for now. All that happens // //is the user runs the program unnecessarily one more time. // if ($completed == 0) // { // echo "No thumbnails were created--this program is done creating thumbnails.\n"; // echo "It is not necessary to run this program again.\n"; // hor_line_thin(); // } // else // { // echo $completed . " thumbnail(s) were created. Please run this program repeatedly again\n"; // echo "until no more thumbnails are created.\n"; // hor_line_thin(); // } //-------------------------------------------------------------------------------- echo CFG_PROGNAME . " execution ends.\n"; hor_line_thick(); //-------------------------------------------------------------------------------- //End of File //-------------------------------------------------------------------------------- ?>