PHP

既存のPHPプロジェクトをEclipseにインポートする

PHP

http://ht6030.com/archives/417 ↑ これで解決しました。 助かりました。

Uncaught exception ApnsPHP_Push_Exception: No notifications queued to be sent

ApnsPHP を使っていると以下のエラーが出た。Uncaught exception ApnsPHP_Push_Exception: No notifications queued to be sent原因はデバイストークンの指定忘れ。 以下のようにコンストラクタで指定しなければならない。

PHP + curl + etags で 304 が帰ってこない

PHP

etagsを利用するサービスで 304 が帰ってこなかったので 調べてみた。【原因1】 curlの header オプションが間違っていた。 headerを指定するには以下の「CURLOPT_HTTPHEADER」を指定するが、 「CURLOPT_HEADER」を指定していた。CURLOPT_HTTPHEADER ... hea…

PHP の curl で初回のアクセスが遅い

PHP

外部のAPIを連続で叩いていたら、 初回のアクセスだけcurlが遅かったので調べてみた結論から言うと、 2回めのアクセスからは HTTP Keep Alive が効いているから高速みたい。 http://stackoverflow.com/questions/11412406/facebook-graph-extremely-slow-in-…

php-pecl-memcached の接続タイムアウト

PHP

memcached のタイムアウトは以下のように setOption() で設定する。 setOption( Memcached::OPT_CONNECT_TIMEOUT, 100 ); $mem->addServer(127.0.0.1, 11211); $version = $mem->getVersion(); 他にも色々定数があって設定できる。 http://php.net/manual/ja…

vagrant + nginx + fuelPHP で Please check the permissions on /var/www/fuel/fuel/app/logs/ のエラー

PHP

前に apache でハマった。 とりあえず nginx と php-fpm の user, group を vagrant に変更してみる。/etc/php-fpm.d/www.conf user = vagrant group = vagrant /etc/nginx/nginx.conf user vagrant;設定したら nginx, php-fpm を再起動して終わり。

vagrant + apache + fuelPHP で Please check the permissions on /var/www/fuel/fuel/app/logs/ のエラー

PHP

パーミッションを設定しても以下のエラーが出る。Error - Uncaught exception 'Fuel\Core\FuelException' with message 'Unable to create or write to the log file. Please check the permissions on /var/www/fuel/fuel/app/logs/' in /var/www/fuel/fuel…

【PHP】オブジェクトの値渡し

PHP

忘れててハマったのでメモ。他の言語だと関数の引数に指定した場合に参照渡しになるけど、 PHPは普通の代入でも参照渡しになってしまう。 まあ、この「参照渡し」という表現も厳密には違うらしいけど・・・。 http://www.php.net/manual/ja/language.oop5.re…

PHP5.4 に OPcache をインストールする。

APCはPHP5.4から対応しなくなる。 ということで、代わりにOPcacheを使う。PHP5.5からは標準同梱しているが、 PHP5.4だとソースからインストールする必要がある。まずは php-devel をインストール。 # yum -y install php-devel次にソースを持ってくる。 # gi…

【PHP】date() or DateTimeクラス で任意の日付が月の何週目かを取得する

PHP

date or DateTime で任意の日付が月の何週目かを取得する。 結論から言うと、 date() or DateTime に「任意の日付が今月の何週目かを取得する機能」はない。なので自作する必要がある。一応、以下で年間通算の週番号を取得することは可能なので、それを利用…

【PHP】ワンライナーで相対的な日付を取得する

PHP

date()の第2引数でstrtotime()を利用して相対的な日付を設定して、 フォーマットを指定する。 DateTimeのようなオブジェクト同士の比較は無理だけど、 文字列として日付が欲しいのであればこれで十分。 【例】 $yesterday = date('Y/m/d H:i:s', strtotime('…

【PHP】Gmail + imap で Retrying PLAIN authentication after [ALERT] Please log in via your web browser: http://support.google.com/mail/accou (errflg=1) in Unknown on line 0

PHP

PHPで imap を使ってgmailからメールを抽出するシステムを作ってたら、 以下のエラーが出た。Retrying PLAIN authentication after [ALERT] Please log in via your web browser: http://support.google.com/mail/accou (errflg=1) in Unknown on line 0PHP …

【PHP】PHPの最大実行時間

PHP

PHPでちょっと時間のかかる処理を書こうとして、 今更ながらタイムアウトが気になったので調べてみた。PHPの最大実行時間は php.ini の「max_execution_time」で設定できるらしい。 http://www.php.net/manual/ja/info.configuration.php#ini.max-execution-…

【PHP】PHPをデーモン化する PEAR の System_Daemon

PHP

PHPで書いた常駐型スクリプトをデーモン化したいと思ったら、 PEARのSystem_Daemonというパッケージでできるらしい。環境は CentOS 6.4 です。 【インストール】 # yum install php-posix # pear install System_Daemon # pear install Log 【使い方】 'dea…

【PHP】Message Pack を使う。

PHP

Message Pack は オブジェクトをシリアライズできるライブラリ。 シリアライズであれば、PHP標準の serialize() と json_encode() があるが、 Message Pack を使うと、 シリアライズ後のデータが小さく、 シリアライズ/デシリアライズの変換が高速らしい・・…

【Oracle】Oracle + PHP + Apache で 文字化けする。

Oracle + PHP + Apache で文字化けする。文字化けなので、PHPの文字コードかと思ったけど、違った。 Oracle + Apache の場合はApache側に以下の設定が必要になる。 ・ORACLE_HOME ・ORACLE_SID ・NLS_LANGこの中の「NLS_LANG」を設定していなかった。 普通は…

【PHP】IPアドレスからプロバイダ(ホスト名)を取得する。

PHP

gethostbyaddr() を使う。 http://php.net/manual/ja/function.gethostbyaddr.php使い方は簡単で、gethostbyaddr() の引数にIPを渡すだけ。 $host = gethostbyaddr('192.168.1.100'); DNSに問い合わせているので、速度で問題があるかもしれないけど、 現状で…

【PHP】PDOの型指定

PHP

PDOでプリペアードステートメントを使ってDB操作をしていて、 OFFSET と LIMIT に値をバインドできなかった。 エラーになる。 $sql = "SELECT * FROM test LIMIT :limit OFFSET :offset"; $db = $this->connectDb(); $stmt = $db->prepare($sql); $stmt->bin…

【PHP】【PostgreSQL】pg_num_row() で行数が0にならない

凡ミスで1時間程ハマった。pg_num_row()は結果の行数を返すメソッド。 今回使ったSQLは以下。 select count(*) from tb_test; 単純に count() を使ったSQLなんだけど、 これではダメなことに気づかなかった。count() は結果がなくても「0」という結果を返す…

【PHP】【CentOS】php_network_getaddresses: getaddrinfo failed: Name or service not known

PHPでHTTPアクセスをしていたら、 「php_network_getaddresses: getaddrinfo failed: Name or service not known」 のエラーが発生した。DNSの設定不備で名前解決ができていないらしい。 ドメインではなく、IPでアクセスすると正常に動作する。 GoogleのDNS…

require と include の違い

PHP

今まで require_once でファイルを読み込んでいたけど、 include と何が違うのか・・・???ってことで、調べてみた。違いは2点。1.読み込み対象ファイルが存在しない場合の処理 require : error include : warning2.ループ処理で使えるかどうか require : 使…

配列で特定の値を削除する

PHP

配列で特定の値を削除した場合、 今までは配列を for() で回しながら if() とかで判定していた。でも、array_diff() を使えば簡単にできる。 array_diff() は 配列同士の差を返す関数なので、 削除したい値を定義した配列を指定すれば、 その値を除いた配列…

乱数生成 mt_rand()

PHP

今まで PHP の乱数生成には rand() を使っていた。 でも、 rand() よりも高速な mt_rand() がある。 http://php.net/manual/ja/function.mt-rand.php今まで乱数生成に速度を求めるケースはあまりなかったけど、 今後は mt_rand() を使ってみようと思う。

【PHP】PHPから非同期でシェルを実行

PHP

ちょっとしたバッチ処理を手動で実行したい。 でも、そのPHPファイルはドキュメントルート以外にある場合、 コマンドライン実行でスクリプトを起動する。 /dev/null &'); ?> exec() にフルパスでスクリプトを指定するだけ。 「/dev/null &」を付けることで…

タイプヒンティング

PHP

「タイプヒンティング」とは関数の引数に型を指定できる機能。PHPは型が動的に決まるし、 暗黙の型変換とか無理やり動かそうとする感があって バグの温床になりやすい気がする。 気をつければいいといえばそうなんだけど・・・。使い方は簡単で、他の静的型…

memcached

memcachedを使ってみた。負荷分散のために複数のWebサーバでセッションを使用するときに memcachedサーバで一括管理できたりする。KVSとしての使い道もあるかもしれないけど、 再起動でデータ消えるからダメかな・・・。 セッション管理で十分か。

DateTimeで比較演算子を使った比較

PHP

PHP 5.2.2 から DateTime で比較演算子を用いた比較が可能になった。知らなかった・・・。 $now = new DateTime(date('Y-m-d')); $after = new DateTime('2000-01-01'); if($now > $after){ }else{ } こんなのが可能になる。 PHPのバージョンに注意。

PostgreSQLのエスケープ

PostgreSQLのエスケープをメモ。 $str = pg_escape_string($str);

HTMLのエスケープ処理

エスケープ処理のメモ。 $str = htmlentities($str, ENT_QUOTES, mb_internal_encoding()); mb_internal_encoding() は utf-8 指定でもいいかな。

マルチバイト文字対応の関数

PHP

マルチバイト文字用の関数がある。 今まで何度か使ってきたけど、「mb」はマルチバイトのことだったのか・・・多分。mb_strlen() mb_substr() などなど・・・ http://php.net/manual/ja/ref.mbstring.php文字コードをUTF-8にすれば日本語を正確に扱えるよう…

配列の削除とインデックスの振り直し

PHP

配列の要素を削除するには unset() を使う。 $arr = array('a', 'b', 'c', 'd'); unset($arr[0]); ただ、 unset() はインデックスを振りなおしてくれない。 当然といえば当然かもしれない・・・。 なので、 array_values() で振り直す。 $arr2 = array_value…

文字列を改行と句読点で区切って配列にする。

PHP

正規表現を使う方法もあるが、str_replace() → explode() でもいける。 $sentence = str_replace(array("\r\n", "\r", "\n"), '###', $sentence); $sentences = explode('###', $sentence); 上記の例は改行を「###」に置換してから「###」で配列化している。…

for文を高速にする

PHP

for文を使うときはループ回数を以下のように「 $i for( $i = 0; $i < count($arr); $i++ ){ } これは遅いらしい。 ループ毎に count() を実行しているからかな???なので、以下のようにループ回数を「$max_count」でキャッシュするといいらしい。 for( $i = 0…

複数の submit を判別する

1つの form に複数の submit を設置して処理を分けたい。submit も name属性 が使えるので、value が $_POST で渡される。 value は ボタンのラベルになるので、 empty() で name のインデックスを確認すれば処理を分けれる。 <input type='submit' name='submit1' value='hoge'> <input type='submit' name='submit2' value='fuga'> if(empty($_POST['submit1'])…

Zend_Date のコンストラクタ

PHP

Zend_Date を使っていたが、 コンストラクタに渡す配列が問題で上手く日付が設定できなかった。以下のように書くと・・・$datearray = array( 'year' => 2013, 'month'=>1 ); $zend_date = new Zend_Date($datearray);うまくいかない・・・。 2012/1 になる…

trimは全角を取り除かない

PHP

知らなかった・・・。 ということで、調べてみたら解決策は2つ。1.正規表現で取り除く。 2.全角スペースを半角スペースに置換して取り除く。2番が簡単かな・・・。 具体的なコードは調べればいくらでも出てくるので書きません。休みの日は自分の好きなことが…

Fatal error: Maximum execution time of 0 seconds exceeded

PHP

max_execution_time は処理のタイムアウト。 php.iniの設定で 0 にしていればタイムアウトはないはずなのだが、 max_input_time の値でタイムアウトしていた。 こっちも変える必要がある。

最新レコードの取得

手法としては2つ。1.phpの「mysqliクラスのinsert_idプロパティ」を使う。2.Mysqlの「LAST_INSERT_ID()」を使う。 select last_insert_id as id;両方共取得する対象列がauto increment である必要がある。 これに関しては、普段から主キーとしてidを定義して…

BOMの削除

PHP

BOMとは、UTF8ファイルの先頭に付く識別子みたいなもの。以下の関数でBOMを削除できる。

【PHP】fwrite() の改行コード その2

PHP

前にfwriteの改行コードについて書いたが、またハマった・・・。PHPの改行コードは「"」でくくる必要がある。 「'」だと、そのまま出力される。 brタグ を \n に変換する処理がうまくいかなかったのは そのせいなんだね・・・。

外部サーバのMySQLと接続

PHP

ハマった・・・外部サーバのMySQLとPHPで接続しようとしたけど、 接続できない。以下を疑うといいと思う。 1.MySQLユーザーが外部からの接続を許可しているか → ホストを%など外部も設定する。 2.ポートは開いているか → 開ける。 3.接続先サーバのSELinuxの…

【PHP】fwrite()の改行コード

PHP

ハマった・・・。fwrite()を使って改行コードを入れても反映されなかった。 正解は「"」で「\r\n」をくくる。 fwrite($fp, $data."\r\n");

imapで取得したメールのbodyの改行を取る

PHP

ハマった・・・・。 imapで取得したメールはなぜか改行を排除できなかった。以下はダメな例 $data = str_replace(array('\n', '\r', '\r\n'), '', $data); 改行コードをPHP_EOFにすると排除できた。 また、str_replace()でダメならpreg_replace()を使うと上…

ソート

PHP

PHPにはソート用の便利な関数がある。http://php.net/manual/ja/array.sorting.phpこれで少しハマった・・・。 ちゃんと説明読めば問題なかったんだけど・・・。以下をちゃんと確認すること。 ・ソートの基準 → キーをソートするのか、値をソートするのか。 …

エスケープ処理

PHP

htmlspecialchars()を使う。 $title = htmlspecialchars($_data['title'], ENT_QUOTES, 'UTF-8');

headerでredirect

PHP

headerでredirectする。 $root = ''main; $index_url = 'http://'.$_SERVER['SERVER_NAME'].$root; header('Location:'.$index_url);

PHPのnull演算

PHP

DBにnot null 制約を忘れたために、 nullがたくさん・・・。PHPってnullが含まれる演算すると、止まるんじゃ・・・。 と思って調べた。基本的にnullは0として扱われるが、 除算で null / null だとWarningが出る。やっぱnullはダメだよね・・・。

金額を表示するフォーマット

PHP

以下のようにnumber_format()を使えばOK。 number_format('1000')

PHPでPostを利用するときのメモリ制限

PHP

PHPで大きサイズのデータをPostした時に以下のWarningが出た。Warning: POST Content-Length of 数字 bytes exceeds the limit of 数字 bytes in Unknown on line 0これはPostできる容量を超えたことを示しているらしい。 この場合は、$_POSTが空になる。と…