【PHP】webサイト制作でよく使う自作関数
テンプレートを配布しているサイトとしてはぼくの知ってる中ではtemplate-partyが秀逸です。
改修時は掲示板をつけたりコメント、問い合わせフォームをつけたりするのですが、よく使う関数を紹介します。 (備忘も兼ねて)
関数名がおかしくても目を瞑ってください・・・!(>_<)

書いてないけど全部「<?php」と「?>」で囲んでるんだよって言ってました。

私にはよくわからない話だけどお役に立ててください。
1.指定された文字列を出力する
まずは指定された文字列を出力する関数です。
この関数は中味のロジックが一切ないんですが、個人的に「print 'ほげ';」という書き方が嫌いなので使っています。なのでこの後も本来「print 'ほげ';」と書くところは「p('ほげ');」が登場します。
/* ■■■ 指定された文字列を出力します。 */ function p($str){ print $str; }
2.文字列を指定された文字数だけ出力して3点リーダで省略する
一覧にデータを出す場合、文字が長すぎるとせっかく整えてるスタイルが崩れちゃうということがありますよね。
そんなときの対処ははみ出した部分を非表示にするか無理やり指定した文字数しか出さない方法です。以下の関数は後者です。(ifがひとつしか出てこない場合は基本1行で書いてます。)
/* ■■■ 切り取り文字数で文字列をトリム処理し、三点リーダーをつける。 */ function getTrimString($string, $trimLength){ $count = mb_strlen($string); $string = mb_substr($string ,0 ,$trimLength); if($count > $trimLength){ $string = $string.'...'; } return $string; }
文字列が指定文字数に満たない場合はそのまま返します。3点リーダーをつけるのは指定文字数より多い時だけ。
3.Date型を指定フォーマットに変換して返す
日付型の文字列とタイプを受け取ってタイプに指定されたフォーマットに変換して返す関数です。
1のときは単純な年/月/日を出します。
2のときは1.に加えて時間も出します。
それ以外のときはさらに曜日も出します。
よく見たら最後のreturnは要らないですね。来ないです。
/* ■■■ 指定されたDateを指定のフォーマットに変換して返します。 */ function getTimeFormat($date ,$type){ if($type == 1){ return date('Y/m/d', strtotime($date)); }else if($type == 2){ return date('Y/m/d', strtotime($date)).' '.date('H:i:s', strtotime($date)); }else{ $datetime = new DateTime($date); $week = array("日", "月", "火", "水", "木", "金", "土"); $w = (int)$datetime->format('w'); $formatDate = date('Y/m/d', strtotime($date)).'('.$week[$w].') '.date('H:i:s', strtotime($date)); return $formatDate; } return $formatDate; }
4.指定された場所にあるファイルの拡張子を返す
指定されたファイルパスのファイルの拡張子を返す関数です。
これの使いどころはファイル名は管理してるけど拡張子までは管理していないときです。。。ってどんなときやねん!って感じですよね。
だいたいDBと連携しているケースですが、「もうファイル名はIDを使っちゃおう」というときに、拡張子はプログラムで探させるようにしています。
もちろん、拡張子を含めたファイル名を管理しておく方法もあるのですが、代替可能ならDBの管理こうもこうは最低限に抑えたいという考えでやっているので、こういう関数が存在しています。
/* 指定された場所にあるファイルの拡張子を返します。 */ function getImageExtension($path){ /* 精査したい拡張子があればここに追加する */ $extensions = array(1 => 'png' ,2 => 'jpg' ,3 => 'JPG'); for($i = 1 ; $i <= count($extensions) ; $i++){ if(file_exists(getRoot().$path.'.'.$extensions[$i])){ /* 存在する拡張子を発見した!(^O^)/ */ return '.'.$extensions[$i]; }else{ /* ないとき returnしたらダメ。残りを精査してないから。 */ } } return ""; }
もともとの用途が画像ファイルだったので関数名に「Image」が入っていますが、どのファイルでも機能します。
getRoot()の中身は「return $_SERVER['DOCUMENT_ROOT'];」だけです。
5.タイトルと本文を渡してメールを送信させる
ユーザからの投稿を受け取る際は自分にメールが届くようにしています。
主に掲示板、コメント、問い合わせです。
タイトルと本文を渡したら設定したアドレスにメールを送ってくれます。
送信部分をループ処理にすると複数アドレスに送ることも可能です。
function mailSending($subject , $mailBody){ /* 適切な文字に変換 */ $mailBody = html_entity_decode($mailBody,ENT_QUOTES,"UTF-8"); /* 差出人欄 */ $mailHead = "From:".getSendMailAddress(); /* 言語・文字コード設定 */ mb_language('Japanese'); mb_internal_encoding("UTF-8"); /* 送信 */ if(mb_send_mail(getSendMailAddress(), $subject , $mailBody , $mailHead)){ /* 関数を汎用化したため、個別の処理に依存する返り値をもたせない。 */ }else{ /* p('送信失敗。。。ごめんなさい。'); */ } }
「getSendMailAddress()」は送りたいアドレスを返すだけの処理です。
6.おわりに
備忘も兼ねて残しておきました。
結構やりたい処理を調べることはあるんですが、やりたい処理がある程度まとまってるものは案外ないのかなと思います。
全然責任は持てないけど、私のサイトはこれらを使って動いています。一部を紹介しました。