Displaying posts categorized under

PHP

1ヶ月後の日時を取得する

/** * * 1ヶ月後の日時を取得する * @param integer $month * @param date $start_date * @return timestamp */ function endOfMonthPeriod($month, $start_date) { $ts1 = strtotime(sprintf(‘%dmonth -1day’, $month), $start_date); $ts2 = mktime(0, 0, 0, date("m", $start_date) + (int)$month + 1, 0, date("y", $start_date)); return min($ts1, $ts2); }

[PHP] 日付の扱い方

PHPで日付を扱う場合にDateTimeクラスってのがあったのね・・・。 便利すぎる。 <?php $dt = new DateTime("2100/2/28"); //echo $dt->format("Y-m-d"); $tomorrow = new DateTime("tomorrow"); //echo $tomorrow->format(‘明日はY年n月j日です。’); $start_datetime = new DateTime("2100/1/31"); $end_datetime = clone $start_datetime; $end_datetime->modify(‘+1month’); echo $start_datetime->format(‘契約期間はY年n月j日から’); echo $end_datetime->format(‘Y年n月j日までです。’);

[PHP] CKEditorの文字変換時のバグについて

入力支援ツールとして大活躍のCKEditorだが、どうもGoogleChromeとの相性がイマイチっぽい部分がある。 とりあえず気づいたのは、漢字に変換すると文字が2重にダブって入力されてしまうというバグ。 (「漢字」と入力すると「漢字漢字」となる) これはさすがに困るので、ちょっと調べてみた。 入力中に赤い波線が表示された時に必ず起こるのでそこから調べたら、どうやらCKEditorが自動で入力チェックをおこなってくれてるようだ。 とりあえずOFFってみると、例のバグが発生しなくなったので、やっぱりこの機能がバグの引き金となっているようだ。 この機能の恩恵がイマイチわからないし、バグるよりもよっぽどマシなので僕はずっと下記設定でいくことにしました。 // ckeditor/config.jsに下記を追記 config.scayt_autoStartup = false;

Cannot modify header information エラーの対処

開発中に下記のようなエラーがでた。 Warning: Cannot modify header information – headers already sent by 「ああ、header(“Location:~”);の前にまた余計な表示がでちゃってるのね」 と、エラー箇所を見てみると、特に書き方は間違ってないし、前後に余計な空白もない。 おかしいなと思ってググってみると出てきました。 「output_buffering = Off を On にしなさいよ」と。 そんなわけでphpinfo()してみたらやっぱしOffでした。 僕の環境はxamppなので「C:\Program Files\xampp\apache\bin\php.ini」を開いて、該当箇所をOnにしたら問題解消できました。

php.iniの設定

最初に抑えておいたほうがよいphp.iniの設定 memory_limit = 64M post_max_size = 8M upload_max_filesize = 6M mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_output = UTF-8 date.timezone = JST WebサーバのPHP設定で、ブラウザーからWebサーバに対して転送できるデータ容量が指定されています。 memory_limit スクリプトが確保できる最大メモリをバイト数で指定します。 post_max_size POSTデータに許可される最大サイズを設定します。(整数で指定する場合、単位はバイト) upload_max_filesize アップロードされるファイルの最大サイズ。(整数で指定する場合、単位はバイト) [それぞれの設定の関係] memory_limit ≧ post_max_size ≧ upload_max_filesize ※レンタル共用サーバを使っている場合、PHP設定を変更できないこともある。

ファイルやディレクトリの作成と削除

//ディレクトリを新規作成 make_dir("/home/hoge/public_html/","name"); //ファンクション定義 function make_dir($path,$dir_name){ umask(0); mkdir($path.$dir_name, 0777); } // ディレクトリを削除 delete_dir("/home/hoge/public_html/"); //ファンクション定義 function delete_dir($path){ $dir = opendir($path); while($file = readdir($dir )){ if($file != ‘.’ && $file != ‘..’){ unlink($path.’/’.$file ); } } rmdir($path); } // ファイルが確認できなければファイルを生成 if( !file_exists($file_name) ){ // ファイル生成&書き込み $fp = fopen($file_name, "w"); $str = ‘記事はまだありません’; $str = mb_convert_encoding($str, "UTF-8", "auto"); //UTF-8で保存 [...]

Preg_Replaceで拡張子を取り除く

例)アップロードファイルの拡張子を取り除く場合 Preg_Replace(“/\.\w{3}$/”, “”, $_FILES['uploadfile']['name'])

Smartyを利用する際の基本構成

◆構成 例)Smartyテンプレートエンジンを利用する場合(PC/Mobile) config/ └config.php libs/ ├plugins/ ├internals/ ├function.php ├function.class.php ├Smarty.class.php └MySmarty.class.php templates/ ├pc/ └m/ templates_c/ ├pc/ └m/ public_html/ ├img/ ┃├pc/ ┃└m/ └css/

Smartyでテーブルを表示する

例) 3列表示したら行を変える <table> <tr> {{foreach from=$data item=data name=data}} <th>名前< /th>< td>{{$data.name}}< /td> {{if $smarty.foreach.data.iteration is div by 3}} </tr>< tr> {{/if}} {{/foreach}} </tr> </table>

マルチバイト文字の置換

通常、文字列の置換にはstr_replace()やstrtr()を利用する。 http://www.phppro.jp/phptips/archives/vol2/2 ところがこいつらは漢字などの日本語には適さないようだ。 そこでmb_ereg_replace()関数が利用できるのだが、こいつもちょっとクセがあった。 具体的には、UTF-8などSJIS以外で作成したファイルで実行するとキーワードがマッチしてくれなかった。 ということで、いったん置換前と置換後のキーワードを配列にしてmb_convert_variables()関数でSJISにエンコード変換してからmb_ereg_replace()を実行すると、きちんと置換が行なわれた。 ■ 例: $trance = array(“飲み放題”=>”食べ放題”,”訂正”=>”修正”); foreach($trance as $key=>$val){ $before[] = $key; $after[] = $val; } mb_convert_variables( “sjis”, “auto”, $before); mb_convert_variables( “sjis”, “auto”, $after); for($i=0;$i