PHP

メソッドチェーン

PHP

メソッドチェーン( こんなやつ → $xxx->xxx()->xxx() )が使ってみたかったので試しに作成してみた。 Class hoge { public function this() { return $this; } public function hello() { echo 'hello'; } } $hoge = new hoge(); $hoge->this()->hello(); /…

同じ名前のPOSTデータ

ボタンを押した箇所の値が上手く送れないケースNGな例: <form method="post" action="delete.php"> <input type="submit" value="削除" onClick="return confirm('この品物を削除しますか?')"> <input hidden name='item' value="1"> <input type="submit" value="削除" onClick="return confirm('この品物を削除しますか?')"> <input hidden name='item' value="2"> </form> 最…

クラスのオートロード

いちいちクラスを使う際に、require(クラス名.class.php)などをするのは面倒なので、autoloadを実装してみた。まずは.htaccess(apacheの *.confでもよい)に以下を記述して、autoloadファイル自体を自動で読込み [.htaccess] php_value auto_prepend_file "…

配列の末尾に配列のデータを追加

PHP

配列の要素を後ろにくっつけたい場合(添え字は後ろに続くように) $ary1 = array(1,2,3,4); $ary2 = array(5,6,7,8); foreach ($ary2 as $value) { array_push($ary1, $value); } print_r($ary1);Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5]…

CSV出力時に「,」を区切り文字ではなく値としたい

例)「1,450円」としたいのに、Excelで表示した時に「1」「450円」と分かれてしまう。 「"」で括れば良し「"1,450円"」とすれば 1,450円 と表示される

Excel出力時の同一セル改行

PHP

「"」で括った中に改行コードを入れる $cell = '"' . $hoge . PHP_EOL . $fuga . '"';

「+」で同じキーは追加できない

PHP

$array1 = array('hoge'=>1); $array2 = array('hoge'=>2); print_r($array1 + $array2); // Array ( [hoge] => 1 ) $array1 = array('hoge'=>1); $array2 = array('hoge1'=>2); print_r($array1 + $array2); // Array ( [hoge] => 1 [hoge1] => 2 ) array_m…

配列に配列を追加

PHP

配列を追加したいけれど、同じ配列に要素を追加するのではなく、配列としてそのまま次の要素にしたい場合 $data1 = array('hoge'=>1,'piyo'=>array('xxx'=>0)); $data2 = array('fuga'=>2);$data = array_merge(array($data1), array($data2)); Array ( [0] …

オブジェクトのメソッドを確認

オブジェクトに定義されているメソッド名が知りたい場合、直接定義されているファイルを覗いてもよいのですが、PHPでブラウザ表示する事もできます。PHP5から採用されているReflectionを利用します。例)symfonyのactionにて、controllerが持っているメソッ…

スクリプト実行のタイムリミット

タイムリミットを越えると下記のようなエラーが表示される Fatal error: Maximum execution time of 30 seconds exceeded in値の設定箇所は以下、 [php.ini] max_execution_time = 30xxx.phpにて、動的に変更することも可能 set_time_limit(180);

配列の各要素に独自処理(array_walk)

PHP

例)各要素をダブルクオート「"」で括る $array = array('hoge','hoge','hoge','hoge','hoge','hoge','hoge'); //print_r($array) //Array ( [0] => hoge [1] => hoge [2] => hoge [3] => hoge [4] => hoge [5] => hoge [6] => hoge ) array_walk($array, "q…

PHPエラーを表示

PHP

apacheのconfファイルやphp.iniがさわれない時の対処方法.htaccessが使えるなら php_flag display_errors On上記が不可ならば、ソースに記述する エラー表示させたいファイルに以下を追記 ini_set('display_errors', "1");共通で読み込むようなファイルに記…

可変関数

PHP

関数名を変数に代入し、関数ポインタのように利用する 例)array_values()とarray_keys() $func = 'array_values'; $param = array('key1'=>'hoge', 'key2'=>'fuga', 'key3'=>'piyo'); $results = $func($param); print_r($results);出力結果: Array ( [0] …

2次配列の行と列を入れ替え

// 行と列を入れ替え $swaps = array(); for ($i = 0; $i foreach ($datas as $value) { $swaps[$i][] = $value[$i]; } } $datas = $swaps;入替え前の$datas ( [0] => Array ( [0] => 日付 [1] => 総合計 ・・・ [10] => 項目X ) [1] => Array ( [0] => 合計 [1…

複数の変数や配列をまとめて文字コード変換

PHP

mb_convert_encodingではなく、mb_convert_variablesを使う。複数変数の場合 mb_convert_variables('sjis', 'utf-8, euc-jp', $var1, $var2) →var1,var2をsjisに変換配列の場合 mb_convert_variables('sjis', 'utf-8', $array) →$arrayに含まれる文字列をま…

時間の差を表示

PHP

gmdate("H:i:s", strtotime(時間1) - strtotime(時間2))注:date()ではなく,gmdate()を使います例)date()との比較 差1:<br /> 差2:差1:01:01:01 ※gm…

重み付きの抽選ロジック

$value) { $total += $value; if ($rand <= $total) { $result = $key; break; } } echo $result; // 抽選結果($targetsの添字) 補足: ・$sumが100になるように調整す…

phpのモジュールを確認する

PHP

php -m例)ImageMagickが入っているか確認 php -m | grep imagick →imagickと表示されれば、入っている拡張モジュールは/etc/php.dでも確認することができる [user@hoge-dev php.d]$ tree . -- apc.ini -- dbase.ini -- dom.ini -- imagick.ini -- json.ini …

セッションの有効時間

php.iniにて確認。デフォルト値は以下 session.cookie_lifetime = 0値が0の場合はブラウザを閉じるまでだが、その際、以下の確率でガーベジコレクトが起動し、有効時間を過ぎたセッションファイルを削除します session.gc_probability = 1 …分子 session.gc_…

郵便番号から住所を自動入力

templateに以下を付けるかymlに記述 <script src="http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js" charset="UTF-8"></script>symfonyならば、view.ymlでも可 InputSuccess: stylesheets: [mypage/import: {media: print,screen}] javascripts: ["http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js"]以下のようなフォー…

全てのRequestパラメータを配列で取得

actionにて $this->getRequest()->getParameterHolder()->getAll(); ちなみに、以下のget,post別の一括取得は無理でした。 $this->getRequest()->getGetParameters(); $this->getRequest()->getPostParameters(); ※symfony 1.1以降なら使えるらしい[symfony …

mb_convert_kanaの罠

PHP

mb_convert_kana(文字列, "k") としたら、ブラウザ更新するたびに半角になったり全角といった 現象が発生第3引数にエンコードを入れてやったら解決しました。 mb_convert_kana(文字列, "k", "UTF-8")※ k : 全角カナを半角カナに変換

文字列をエスケープ(例:「'」→「\'」)

PHP

echo addslashes("名前'1"); →名前\'1

Spycのエラー

YAMLの記述にミスがあると、以下のようにSpycのエラーが出ることがある Strict Standards: Creating default object from empty value in /usr/share/pear/symfony/util/Spyc.class.php on line 200Notice: Undefined property: stdClass::$data in /usr/sha…

マルチバイトで文字化けしないように

PHP

例)UTF-8でソースを書き、ブラウザ上でもUTF-8で表示させるphp.iniで内部エンコードを設定します [/etc/php.ini] mbstring.internal_encoding = UTF-8phpファイル内で設定する事も可能(一時的な対応) [xxx.php] ini_set('mbstring.internal_encoding', 'U…

日付入力のバリデート

PHP

"2009/05/30"などのように日付入力するフォームでのバリデート例 $date…フォーム入力値if ( $date && !strtotime($date) ) { echo 'NG'; }※ただし、'a'などはOKになるので完全なバリデートではない ※追記 日付の妥当性はこちらの関数も参考に checkdate(mont…

syck(高速YAMLパーサ)について

symfony1.0系では、PHPの拡張モジュールで「syck」がインストールされてたらそっちを優先的に使って、「syck」がなかったら、「Spyc」というライブラリを利用するようになっているらしい。 /etc/php.d/ xxx.ini syck.ini xxx.ini /etc/php.d/ xxx.ini syck.i…

PHP_EOLで改行コード

PHP

以下は同じ結果に。 ※PHP_EOLは環境にも依存しない echo 'aaa' . "\r\n" . 'bbb'; echo 'aaa' . PHP_EOL . 'bbb'; ブラウザ表示: aaa bbbソースを表示: aaa bbb

phpコマンドオプションのヘルプ

$ php -h [admin@xxx:/]$ php -h Usage: php [options] [-f] [--] [args...] php [options] -r [--] [args...] php [options] [-B ] -R [-E ] [--] [args...] php [options] [-B ] -F [-E ] [--] [args...] php [options] -- [args...] php [options] -a -a …

header()で遷移させる

PHP

例)xxx.phpへ遷移 header("Location: xxx.php");※呼び出すまでにHTMLを出力していないことが条件になります。 すでにechoなどで何らかの表示がされている場合、header()はエラーを出力します(遷移しない)