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にすれば日本語を正確に扱えるよう…