とっても使えるPHPスニペットいろいろ
- April 5th, 2011
- Posted in 開発ツール・技術
- Write comment
こういうまとめはよくあるし、安直に紹介するとフルボッコになったりするのですが(汗)、個人的に「お、便利かも!」と思えるスニペットばかりだったのでご紹介。
全部で10個紹介されていますが、個人的にぐっときたものをばざざっと・・・。
■ PHPで距離計算
視点と終点の距離計算をしてくれるコードですね。緯度経度で指定します。また単位(KMとか)も指定できますよ。
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
■ 秒数をいろんな単位に変換
こちらもよく使いそう。結果は配列で帰ってきますね。
function Sec2Time($time){
if(is_numeric($time)){
$value = array(
"years" => 0, "days" => 0, "hours" => 0,
"minutes" => 0, "seconds" => 0,
);
if($time >= 31556926){
$value["years"] = floor($time/31556926);
$time = ($time%31556926);
}
if($time >= 86400){
$value["days"] = floor($time/86400);
$time = ($time%86400);
}
if($time >= 3600){
$value["hours"] = floor($time/3600);
$time = ($time%3600);
}
if($time >= 60){
$value["minutes"] = floor($time/60);
$time = ($time%60);
}
$value["seconds"] = floor($time);
return (array) $value;
}else{
return (bool) FALSE;
}
}
■ ファイルを強制的にダウンロードさせる
ただのリンクじゃなくて、強制的にダウンロードさせたい場合ありますよね。そういうときに使えます。
ちなみに認証後のファイルダウンロードならmod_xsendfileがおすすめです。
function downloadFile($file){
$file_name = $file;
$mime = 'application/force-download';
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile($file_name); // push it out
exit();
}
■ whois情報を取得
これ、前からやり方を知りたかったのですよね・・・なるほど。
$domains = array('home.pl', 'w3c.org');
function creation_date($domain) {
$lines = explode("\n", `whois $domain`);
foreach($lines as $line) {
if(strpos(strtolower($line), 'created') !== false) {
return $line;
}
}
return false;
}
foreach($domains as $d) {
echo creation_date($d) . "\n";
}
他にもfaviconをゲットしたり、住所から緯度経度を取得したり、といったコードがありますよ。一度覗いておくといいかもですね。
» 10 super useful PHP snippets – CatsWhoCode.com


No comments yet.