php

全角と半角が混在した文字列を切り取る場合はmb_strimwidth()が便利

php

例えば半角5文字分切り取りたい場合、「あいう」だと半角6文字分になってしまうので、その場合は「あい」のみ切り取る、という処理をするんだけど、それがめんどくてどうしようと思っていたらmb_strimwidth()で解決できることが分かった。この関数を使うと、…

phpのthrowについてメモ

php

throwはmainの中に書く必要なし。 関数の中でthrowしてgetTrace使えばどの呼び元でエラーが起きたかも分かる。

phpでhttpリクエストをする時の手段まとめ

php

お手軽にやるなら、phpの file_get_contents しっかりやるなら、pearの HTTP_Request phpに依存しないやり方なら、コマンドの curl(またはphpのcurlモジュールを利用)file_get_contentsは簡単に使えるけど、実は色々できて、basic認証はもちろん、ヘッダー付…

ExceptionクラスのgetTrace()を使うとエラーの呼び元が分かる

php

_aaa(); } catch(Exception $e) { print_r($e->getTrace()); } function _aaa() { throw new Exception(); } 結果 Array ( [0] => Array ( [file] => /home/test.php [line] => 48 [function] => _aaa [class] => Test [type] => -> [args] => Array ( ) ) […

phpでキーを保持しながら配列をカットする(切り出す)方法

php

array_sliceはデフォルトのままだとキーを振り直す。 最後にtrueを指定することでキーを保持することが出来る。 2,4=>3),0,1,true)); 結果 Array ( [5] => 2 )

psによる重複チェック

php

ファイル書き込み時はrewindを忘れないこと

php

eclipseでphpの環境を構築する手順

下記のサイトからeclipse4.3(kepler)をダウンロード ※Full Edition の PHP を選択のこと Eclipse 日本語化 | MergeDoc ProjectPDTやSVNのプラグインもセットでダウンロードされる。CakePHPで、ControllerのModelがクラスとして認識されず、F3のジャンプが出…

phpからsshでコマンドを実行する方法

php

例えばweb上でapacheのユーザーから別のユーザーにスイッチして作業したいケースで、phpからsshを使う方法。まずshで問題ないことを確認する(StrictHostKeyChecking no → 確認メッセージを表示しない)。何も考えず以下を実行してみる。 ssh -l user -p 10022…

phpでジョブキューを行う

php

ジョブキューについて http://gihyo.jp/dev/serial/01/perl-hackers-hub/001001 VOYAGE GROUP エンジニアブログ : 重たい処理を華麗にスルーして、アプリケーションの体感速度をぐっと向上させる方法phpだとGearman(ギアマン)が便利らしい。 クライアントか…

細かい処理は全部関数化すること

php

コントローラーの処理は機能単位で細かく関数化すること。そうすればコントローラーのメイン部分の処理はもちろん、関数内でもエラーの時点でreturn falseできるため、ソースが圧倒的に綺麗で見やすくなる。returnができるということは、その時点で処理を抜…

キャッシュという考えが抜けていた

php

APIで正常なアクセスの場合、わざわざ毎回DBに接続しているけど、アクセス時間をキャッシュ(メモリorファイル)して制限時間内かどうかそのキャッシュを見るようにすればよかった。どんなときでも「キャッシュが使えないか」という考えを忘れないようにしよう…

fputcsvで標準出力に出力する

php

csv形式で出力する、っていったらどんなケースであれ、以下の3点がパッと思いつくようにしたい。1 $handle = fopen('php://output', 'w'); 2 $a = array(); $a[] = mb_convert_encoding($str1, 'sjis-win', 'utf8'); $a[] = mb_convert_encoding($str2, 'sji…

str_replaceまとめ

php

直ぐに使い方を忘れるのでメモ 'val1', 'key2' => 'val2', ); str_replace(array_keys($arr), array_values($arr), $str); // 複数の文字を削除したい場合 str_replace(array(" ", "ー", "―", "-", "-"), "", $str);

phpでfloat型の値を比較したい場合はstring型にするとよい

php

ビット演算でステータス管理

php

ビット演算の良いサンプルをみつけた さんぷるクリプト: PHPでビット演算、シフト演算上記サイトの丸コピーです。 各桁のフラグが立っているかどうかで、ステータス管理を行う。 sprintfでビット表示する場合、「b」を使う 1, 'blue'=>2, 'green'=>3, 'white…

htaccessについて

参考サイト [Q&A] htaccess設定値を、PHPから動的に読み込み 【OKWave】 [Q&A] ブラウザ上で.htaccessファイルを更新するには? 【OKWave】 .htaccessの一括管理方法について 現在IPアドレス制限を.htacces.. - 人力検索はてなphpでhtaccessを更新したい場合…

REQUEST_URIを分解する

php

phpだと$_SERVER['REQUEST_URI']でリクエストされたURIを取得できる。このREQUEST_URIは相対パスが入るかと思っていたけど、絶対パス(http://~)が入る場合もあるらしい。で、phpでURLを分解する関数にparse_urlが用意されているけど、この関数は原則絶対パ…

json_decodeを行う時の注意事項

php

jsonデータをphp付属(v5.2以上)のjson_decodeでデコードする際の注意事項まとめ。・object型で返却される {'data'}のようにアローでアクセスする。・オブジェクト型だと何かと不便なので連想配列に変換する

全角半角スペースを削除する方法

php

number_formatは小数点を四捨五入する

php

3桁区切りにカンマを表示するだけじゃないので注意。

必ず===を使うこと

php

if ($k == ‘user_id’) { echo "等しい"; } で$k => 0 のときも「等しい」が表示される。やばいよ、これ。理屈でも分からん。もう絶対に==使うの辞めよう。

utf8の日本語を2バイトにしたければshift_jisに変換すればよい

php

phpのstrlenでutf8のマルチバイトの長さを計ると一文字3バイトでカウントされる。これを2バイトでカウントしたければsjisにすればよいだけ。

日付のフォーマットはdate関数で

php

いっつも忘れるのでメモ。2014/01/05な感じの日付データを2014/1/5な感じに変更したい場合なんだけどdate使えば一発のところsubstrを使っていつもやっちゃう。

php foreachのバグというか気をつける点について

php

これも昔に出くわしていながらよく原因を調べずに今日また同じ問題に遭遇してしまった。

1 == '1a' は true です

php

自戒の念を込めて書く。比較の時は、トリプルイコール(===)使えって散々言われてきたけど面倒くさくていつも==で済ませていた。今日 1 == '1a' がtrueになってヒヤッとした。分かってるつもりで分かっていなかった。適当な性格がこういう所でコーディングに…

csvを読み込むやり方

php

いつも忘れるのでメモしておく

PHPのページャー処理にPearのPagerを使う

php

ずーっと前から気になっていたにもかかわらず自前の微妙なページャーを使っていたんだけど、ようやくPearに用意されているPagerモジュールを使ってみた。以下の様な感じで使う。(CakePHPで利用) 20, "itemData" => $data, "mode" => "Sliding", "prevImg" =…

strtotimeのまずい点

php

3/31に3月を-1 monthした場合、2月にならない3/31 を -1 month -> 2/31 -> 2/28 + 3 -> 3/3 が帰ってくる↓も。基本的に月末はまずい 5/31 -> 5/1 7/31 -> 7/1 10/31 -> 10/13/31に+1monthすると5/1になる。(3/31+1m -> 4/31 -> 4/30+1d -> 5/1)mktime使う…

配列にキーがあるかどうかを調べたいときは、issetではなくarray_key_existsを使う

php

issetはキーがあってもnullだとfalseになるのでその場合は、array_key_existsを使う。 if (array_key_exists("key", $val)) { echo "exists"; } 最初あまりに使っていなくて、array_key_exists($val["key"])とかやってた。あほだ。