PHP
http://ht6030.com/archives/417 ↑ これで解決しました。 助かりました。
ApnsPHP を使っていると以下のエラーが出た。Uncaught exception ApnsPHP_Push_Exception: No notifications queued to be sent原因はデバイストークンの指定忘れ。 以下のようにコンストラクタで指定しなければならない。
etagsを利用するサービスで 304 が帰ってこなかったので 調べてみた。【原因1】 curlの header オプションが間違っていた。 headerを指定するには以下の「CURLOPT_HTTPHEADER」を指定するが、 「CURLOPT_HEADER」を指定していた。CURLOPT_HTTPHEADER ... hea…
外部のAPIを連続で叩いていたら、 初回のアクセスだけcurlが遅かったので調べてみた結論から言うと、 2回めのアクセスからは HTTP Keep Alive が効いているから高速みたい。 http://stackoverflow.com/questions/11412406/facebook-graph-extremely-slow-in-…
memcached のタイムアウトは以下のように setOption() で設定する。 setOption( Memcached::OPT_CONNECT_TIMEOUT, 100 ); $mem->addServer(127.0.0.1, 11211); $version = $mem->getVersion(); 他にも色々定数があって設定できる。 http://php.net/manual/ja…
前に 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 を再起動して終わり。
パーミッションを設定しても以下のエラーが出る。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は普通の代入でも参照渡しになってしまう。 まあ、この「参照渡し」という表現も厳密には違うらしいけど・・・。 http://www.php.net/manual/ja/language.oop5.re…
APCはPHP5.4から対応しなくなる。 ということで、代わりにOPcacheを使う。PHP5.5からは標準同梱しているが、 PHP5.4だとソースからインストールする必要がある。まずは php-devel をインストール。 # yum -y install php-devel次にソースを持ってくる。 # gi…
date or DateTime で任意の日付が月の何週目かを取得する。 結論から言うと、 date() or DateTime に「任意の日付が今月の何週目かを取得する機能」はない。なので自作する必要がある。一応、以下で年間通算の週番号を取得することは可能なので、それを利用…
date()の第2引数でstrtotime()を利用して相対的な日付を設定して、 フォーマットを指定する。 DateTimeのようなオブジェクト同士の比較は無理だけど、 文字列として日付が欲しいのであればこれで十分。 【例】 $yesterday = date('Y/m/d H:i:s', strtotime('…
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.ini の「max_execution_time」で設定できるらしい。 http://www.php.net/manual/ja/info.configuration.php#ini.max-execution-…
PHPで書いた常駐型スクリプトをデーモン化したいと思ったら、 PEARのSystem_Daemonというパッケージでできるらしい。環境は CentOS 6.4 です。 【インストール】 # yum install php-posix # pear install System_Daemon # pear install Log 【使い方】 'dea…
Message Pack は オブジェクトをシリアライズできるライブラリ。 シリアライズであれば、PHP標準の serialize() と json_encode() があるが、 Message Pack を使うと、 シリアライズ後のデータが小さく、 シリアライズ/デシリアライズの変換が高速らしい・・…
Oracle + PHP + Apache で文字化けする。文字化けなので、PHPの文字コードかと思ったけど、違った。 Oracle + Apache の場合はApache側に以下の設定が必要になる。 ・ORACLE_HOME ・ORACLE_SID ・NLS_LANGこの中の「NLS_LANG」を設定していなかった。 普通は…
gethostbyaddr() を使う。 http://php.net/manual/ja/function.gethostbyaddr.php使い方は簡単で、gethostbyaddr() の引数にIPを渡すだけ。 $host = gethostbyaddr('192.168.1.100'); DNSに問い合わせているので、速度で問題があるかもしれないけど、 現状で…
PDOでプリペアードステートメントを使ってDB操作をしていて、 OFFSET と LIMIT に値をバインドできなかった。 エラーになる。 $sql = "SELECT * FROM test LIMIT :limit OFFSET :offset"; $db = $this->connectDb(); $stmt = $db->prepare($sql); $stmt->bin…
凡ミスで1時間程ハマった。pg_num_row()は結果の行数を返すメソッド。 今回使ったSQLは以下。 select count(*) from tb_test; 単純に count() を使ったSQLなんだけど、 これではダメなことに気づかなかった。count() は結果がなくても「0」という結果を返す…
PHPでHTTPアクセスをしていたら、 「php_network_getaddresses: getaddrinfo failed: Name or service not known」 のエラーが発生した。DNSの設定不備で名前解決ができていないらしい。 ドメインではなく、IPでアクセスすると正常に動作する。 GoogleのDNS…
今まで require_once でファイルを読み込んでいたけど、 include と何が違うのか・・・???ってことで、調べてみた。違いは2点。1.読み込み対象ファイルが存在しない場合の処理 require : error include : warning2.ループ処理で使えるかどうか require : 使…
配列で特定の値を削除した場合、 今までは配列を for() で回しながら if() とかで判定していた。でも、array_diff() を使えば簡単にできる。 array_diff() は 配列同士の差を返す関数なので、 削除したい値を定義した配列を指定すれば、 その値を除いた配列…
今まで PHP の乱数生成には rand() を使っていた。 でも、 rand() よりも高速な mt_rand() がある。 http://php.net/manual/ja/function.mt-rand.php今まで乱数生成に速度を求めるケースはあまりなかったけど、 今後は mt_rand() を使ってみようと思う。
ちょっとしたバッチ処理を手動で実行したい。 でも、そのPHPファイルはドキュメントルート以外にある場合、 コマンドライン実行でスクリプトを起動する。 /dev/null &'); ?> exec() にフルパスでスクリプトを指定するだけ。 「/dev/null &」を付けることで…
「タイプヒンティング」とは関数の引数に型を指定できる機能。PHPは型が動的に決まるし、 暗黙の型変換とか無理やり動かそうとする感があって バグの温床になりやすい気がする。 気をつければいいといえばそうなんだけど・・・。使い方は簡単で、他の静的型…
memcachedを使ってみた。負荷分散のために複数のWebサーバでセッションを使用するときに memcachedサーバで一括管理できたりする。KVSとしての使い道もあるかもしれないけど、 再起動でデータ消えるからダメかな・・・。 セッション管理で十分か。
PHP 5.2.2 から DateTime で比較演算子を用いた比較が可能になった。知らなかった・・・。 $now = new DateTime(date('Y-m-d')); $after = new DateTime('2000-01-01'); if($now > $after){ }else{ } こんなのが可能になる。 PHPのバージョンに注意。
PostgreSQLのエスケープをメモ。 $str = pg_escape_string($str);
エスケープ処理のメモ。 $str = htmlentities($str, ENT_QUOTES, mb_internal_encoding()); mb_internal_encoding() は utf-8 指定でもいいかな。
マルチバイト文字用の関数がある。 今まで何度か使ってきたけど、「mb」はマルチバイトのことだったのか・・・多分。mb_strlen() mb_substr() などなど・・・ http://php.net/manual/ja/ref.mbstring.php文字コードをUTF-8にすれば日本語を正確に扱えるよう…