ウェブサイトのキャプチャとか〜

linuxサーバーでwkhmltopdf/wkhtmltoimgをつかってキャプチャする場合です。
これをつかいます。
Google Code Archive - Long-term storage for Google Code Project Hosting.
レンタルではサーバーをいじれないので使えません
CGIの禁止事項でバイナリファイルは使用不可=サンプルはありません。


■インストール手順
# cd /usr/local/src
# wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.10.0_rc2-static-i386.tar.bz2
# tar jxf wkhtmltoimage-0.10.0_rc2-static-i386.tar.bz2
# cp wkhtmltoimage-i386 /usr/local/bin/wkhtmltoimage
ここらへんはバージョンの違いとかいろいろあるので、検索で調べてみてくださいw
上記にはwkhtmltopdfとwkhtmltoimageの両方があるので両方いれます。


PHPで飾り気のないものをつくりました
・以下の設置は/var/www/html/wkとしました。
・キャプチャデータも同じフォルダに生成されます。適宜変更してください。
(注意:キャプチャデータが生成されるフォルダのパーミッションを書込み可にする)
wk.php

<?php
class wkTool{
	var $size;
	var $url;
	var $nam;
	var $ext;
	function __construct($s="100",$u,$n="sample",$e="jpg"){
		$this->setData($s,$u,$n,$e);	
	}
	function setData($s,$u,$n,$e){
		$this->size=$s;
		$this->url=$u;
		$this->nam=$n;
		$this->ext=$e;
	}
		//IMG
	function wkhtmltoImage(){
		$s=$this->size;
		$u=$this->url;
		$f="/var/www/html/wk/".$this->nam.".".$this->ext;
		exec("/usr/local/bin/wkhtmltoimage --quality $s $u $f");	
	}
	function showImage(){
		$s=$this->size;
		$u=$this->url;
		$f=$this->nam.".".$this->ext;
		$i=getimagesize($f);
		$w=$i[0]*$s/100;
		$h=$i[1]*$s/100;
		$d=$this->dlLink();
		$str='<img src="'.$f.'" width="'.$w.'" height="'.$h.'"/><br />';
		$str.='<a href="'.$u.'">'.$u.'</a>('.$s.'%)'.$d;
		return $str;
	}	
		//PDF
	function wkhtmltoPDF(){
		$s=$this->size;
		$u=$this->url;
		$f="/var/www/html/wk/".$this->nam.".".$this->ext;
		exec("/usr/local/bin/wkhtmltopdf $u $f");
	}
	function showPDF(){
		$s=$this->size;
		$u=$this->url;
		$f=$this->nam.".".$this->ext;
		$d=$this->dlLink();
		$str='<a href="'.$u.'">'.$u.'</a>('.$s.'%)'.$d.'<br />';
		$str.='<embed src="'.$f.'#zoom='.$s.'" type="application/pdf" width="100%" height="100%"/>';
		return $str;
	}
		//inner method
	private function dlLink(){
		$f=$this->nam.".".$this->ext;
		$fs=filesize($f);
		$str='<form method="post" action="download.php">';
		$str.='<input type="hidden" name="filepath" value=""/>';
		$str.='<input type="hidden" name="filename" value="'.$f.'"/>';
		$str.='<input type="hidden" name="ext" value="'.$this->ext.'"/>';
		$str.='<input type="submit" value="ダウンロード"/>('.$this->ext.':'.$fs.'byte)';
		$str.='</form>';
		return $str;
	}
}
?>
<html>
<head>
<style>
	ul{
		position:relative;
		list-style:none;
	}
	ul li label{
		display:inline-block;
		width:100px;
	}
	img{
		border:3px solid black;
	}
</style>
</head>
<body>
<form action="" method="post">
<ul>
	<li>
		<label for="ext">変換形式</label>
		<input type="radio" name="ext" id="ext_pdf" value="pdf"/><label for="ext_pdf">PDF</label>
		<input type="radio" name="ext" id="ext_jpg" value="jpg" checked="checked"/><label for="ext_jpg">JPEG</label>
	</li>
	<li><label for="size">大きさ(%)</label><input type="text" name="size" id="size" size="4"/></li>
	<li><label for="url">変換元URL</label><input type="text" name="url" id="url"/></li>
	<li><label for="nam">名前</label><input type="text" name="nam" id="nam"/></li>
	<li><label></label><input type="submit" value="変換"/></li>
</ul>
</form>
<?php
if(isset($_POST["url"])){
	$udat=new wkTool($_POST["size"],$_POST["url"],$_POST["nam"],$_POST["ext"]);
	switch($_POST["ext"]){
		case "pdf":
			$udat->wkhtmltoPDF();
			echo $udat->showPDF();
			break;
		case "jpg":
			$udat->wkhtmltoImage();
			echo $udat->showImage();
			break;
		default:exit();
	}
}
?>
</body>
</html>

download.php

<?php
$filename=$_POST['filename'];
$fullpath=$_POST['filepath'].$filename;
$ext=$_POST['ext'];
$ctype="";
switch($ext){
	case "jpg":$ctype="image/jpeg";break;
	case "pdf":$ctype="application/pdf";break;
	default:exit();
}
header("Content-type: $ctype");
header("Content-Disposition: attachment; filename=$filename");
readfile($fullpath);
?>