Version: 1.0
Type: Full Script
Category: Graphics
License: GNU General Public License
Description: This will receive the path to a PDF as a command line argument, generate multiple thumbnails at various sizes, then ftp them to various locations. This is meant to be a command line script not a web page…
#!/usr/local/bin/php <?php # This is a command line php script to generate the thumbnail images of PDFs # Authored by Alec Effrat (aeffrat (at) tribune (dotted) com) please # forward any ideas, comments, questions or enhancements back to me if possible. # # EXAMPLE OUPTUT FILENAME: # 07-16-04_XXX_XXXX_126w_227h.gif # This script relies upon ImageMagick and Ghostscript being installed, # please reference the wonderful http://www.imagemagick.org/ website, # as such it requires these to be added into the PATH and LD_LIBRARY_PATH # Set the PATH putenv("PATH=" . $_SERVER['PATH'] . ":/usr/local/bin"); # Set the LD_LIBRARY_PATH # Must put the library path in for ImageMagic/Ghostscript putenv("LD_LIBRARY_PATH=" . $_SERVER['LD_LIBRARY_PATH'] . ":/usr/local/lib"); # Get the first argument # die unless argument was supplied # EXAMPLE INPUT FILENAME: # /PDF/08-25-04_XXX_XXXX_XX_XXX_1_1.pdf if (array_key_exists('argv', $_SERVER) && array_key_exists(1,$_SERVER['argv'])) { $filename = $_SERVER['argv'][1]; } else { die("Must supply atleast one file via command linen"); } # Globalish variables # # $filecomponents = an array of each part of the base filename $filecomponents = array(); # Make a new thumbnails element for each desired size $thumbnails[] = array( "width" => 126, "height" => 227 ); $thumbnails[] = array( "width" => 240, "height" => 433 ); $thumbnails[] = array( "width" => 74, "height" => 131 ); # Setup FTP Connections $ftpconfig[] = array( "host" => "host1.foo.bar", "user" => "ftpuser", "password" => "ftppass", "path" => "/any/place/you/like", "retries" => 5, "retry_delay" => 10, ); $ftpconfig[] = array( "host" => "host2.foo.bar", "user" => "ftpuser", "password" => "ftppass", "path" => "/any/other/place/you/like", "retries" => 5, "retry_delay" => 10, ); $ftpconfig[] = array( "host" => "host3.foo.bar", "user" => "ftpuser", "password" => "ftppass", "path" => "/even/an/offsite/backup/location", "pasv" => true, "retries" => 5, "retry_delay" => 10, ); ### # Begin Functions # Generate the new thumbnail name function new_thumb_name($filename,$width,$height) { # Get just the filename, cut off the extension $base = basename($filename,".pdf"); $filecomponents = explode("_",$base); # Generate the file name using the agreed upon standard $newfilename = sprintf("%s_%s_%s_%sw_%sh.gif",$filecomponents[0],$filecomponents[1],$filecomponents[2],$width,$height); # Return the filename return $newfilename; } # Generate the ftp destination name function send_via_ftp(&$files,&$ftpconfig) { foreach ($ftpconfig as $ftp) { # Reset the loop counter to 1 $i = 0; # Do the loop x number of times while (++$i <= $ftp['retries']) { # set up basic connection $conn_id = ftp_connect(strval($ftp['host'])); # If we successfully connected... if ($conn_id) { # login with username and password $login_result = ftp_login($conn_id, $ftp['user'], $ftp['password']); # Needs PASV? # If PASV is set in the ftpconfig block use it. if (array_key_exists('pasv',$ftp) && $ftp['pasv']) { ftp_pasv($conn_id,true); } } # check connection if ((!$conn_id) || (!$login_result)) { fwrite(STDERR,"FTP connection has failed! Attempt #$i of " . $ftp['retries'] . "n"); fwrite(STDERR,"Attempted to connect to " . $ftp['host'] . " for user " . $ftp['user'] . "n"); if ($conn_id) {ftp_close($conn_id);} sleep($ftp['retry_delay']); continue; } else { foreach ($files as $file) { # upload the file $upload = ftp_put($conn_id, basename($file), $file, FTP_BINARY); # check upload status if (!$upload) { fwrite(STDERR,"FTP upload of $file to " . $ftp['host'] . " has failed!n"); reset($files); ftp_close($conn_id); sleep($ftp['retry_delay']); continue; } } reset($files); } # close the FTP stream ftp_close($conn_id); break; } } } # End Functions ### ### # Begin Main Code foreach ($thumbnails as $thumbnailarray) { $destinations = array(); $width = $thumbnailarray['width']; $height = $thumbnailarray['height']; $newfilename = new_thumb_name($filename,$width,$height); $newfile = "/PDF/Thumbnails/" . $newfilename; # Use ImageMagic+Ghostscript to do the thumbnail generation # at desired height/width $error = `/usr/local/bin/convert -trim -thumbnail ${width}x${height} "$filename" $newfile`; $files[] = $newfile; } send_via_ftp(&$files,&$ftpconfig); ?>