【アルカディア】Webページのサムネール生成コード
トグサです。
ケイスがつくっている面白すぎるアルカディアですが、
サムネール生成サーバが動いているサーバは、
MacMini上のParallelsで動いているUbuntuなので、重い&偶に落ちます。
まぁそれは仕方無いのですが、問題は、その度に私の前(MacMiniがある)に来ては、
「また落ちた!重い!もー!全画面からもどせねー!」と叫んで行く事です!
毎日これでは、またシリコン鉱床に埋もれかねないので、
もうちょっと安定し、さらに簡易キャッシュ機能をもたせたサムネール生成サーバを30分くらいでつくりました。
Windowsマシン+CrenaHtml2jpg+Apache2+PHPです。
すべて普通にインストールして、このPHPスクリプトを置きます。
<?php
$crena_exe_path = "C:\\ht_cgi\\crena\\CrenaHtml2jpg.exe";
$crena_image_quarity = 85;
$crena_timeout_sec = 15;
$cache_timeout_sec = 60 * 5;
$image_data_path = "C:\\ht_cgi\\img\\";
function safe_cmd_sanitize_string( $_str )
{
return strtr( $_str, "\\>\"&<| \0", "________" );
}
function conv_intval( $_str, $_min, $_max, $_err_default )
{
$val = intval( isset($_GET[$_str]) ? $_GET[$_str] : "0" );
return ($val < $_min || $_max < $val) ? $_err_default : $val;
}
$cache_str = "";
$cache_str .= "_" . ( $url = safe_cmd_sanitize_string( $_GET['url'] ) );
$cache_str .= "_" . ( $width = conv_intval( 'width', 32, 1280, 640 ) );
$cache_str .= "_" . ( $height = conv_intval( 'height', 24, 1024, 480 ) );
$cache_str .= "_" . ( $dwidth = conv_intval( 'dwidth', 32, 1280, 1024 ) );
$cache_str .= "_" . ( $dheight = conv_intval( 'dheight', 24, 1024, 768 ) );
$file_name = $image_data_path . md5( $cache_str ) . ".jpg";
if( !file_exists( $file_name ) || $cache_timeout_sec < (time() - filemtime( $file_name )) )
system( "$crena_exe_path -o\"{$file_name}\" -fjpeg -w{$dwidth}x{$dheight} -s{$width}x{$height} -q$crena_image_quarity -t$crena_timeout_sec -u$url" );
header("Content-type: image/jpeg");
readfile( file_exists( $file_name ) ? $file_name : "{$image_data_path}na.jpg" );
?>
後は、こいつを、
http://localhost:8088/index.php?url=http%3A%2F%2Fwww.hogehogex.jp%2F&width=640&height=480
みたいにして呼べばOK。
CrenaHtml2jpgが外部呼出しを前提につくってあるので、楽につくれました。ありがたいですね。どうやら、あちら側でも盛んにつかわれてるようです。
あとは、PHPの設定を、他の余計なコードが実行されないように設定したほうがいいですね。