[PHP] 文字列中に部分文字列が含まれるかチェックする

strpos関数を使う。マルチバイト文字列の場合はmb_strpos関数。

strpos関数は文字列中で部分文字列が最初に現れる位置を0ベースの整数値で返す。部分文字列が見つからない場合はFALSEを返すのでこれをチェック。

参考サイト

PHP: strpos – Manual
http://us2.php.net/manual/ja/function.strpos.php

PHP: mb_strpos – Manual
http://php.net/manual/ja/function.mb-strpos.php

[PHP] 比較演算子 == と === の違い

PHPには === (イコールが3個) という比較演算子がある。

C++やC#から来た人は意外に思うかも。僕も最初「なんだこれ?」と思った。

マニュアルを見て違いを押さえておく。

名前 結果
$a == $b 等しい 型の相互変換をした後で $a が $b に等しい時に TRUE。
$a === $b 等しい $a が $b に等しく、および同じ型である場合に TRUE 。

たとえば

  • $a = 123;
  • $b = ‘123’;

の場合、以下の結果となる

  • $a == $b はTRUE
  • $a === $b は型の違いによりFALSE

この否定の演算子もある。振る舞いは同様。

名前 結果
$a != $b 等しくない 型の相互変換をした後で $a が $b に等しくない場合に TRUE。
$a !== $b 等しくない $a が $b と等しくないか、同じ型でない場合に TRUE 。

参考サイト

PHP: 比較演算子 – Manual
http://php.net/manual/ja/language.operators.comparison.php

[PHP] 2つの日時の差を表示する

date_diff() 関数を使うと、2つの日時の差を得ることができる。

参考サイト

PHP: DateTime – Manual
http://php.net/manual/ja/class.datetime.php

[PHP] メールを送信する (Smarty)

メールを送信するサンプルコード。メール本文はSmartyで定義。

Smartyを使わないサンプルは以下。

[PHP] メールを送信する | プログラミング雑記
https://www.84kure.com/blog/?p=196

[PHP] メールを送信する

メールを送信するサンプルコード。

[PHP] ファイルをロックして書き込む (排他制御)

複数のプロセスが同じファイルに書き込むような場合には排他制御が必要になる。

しかし、書き込もうとしたファイルが既に別プロセスによってロックされていた場合に「ロックされていたので書けませんでした」と言われても困る。別プロセスがファイルのロックを解除するのを待って書き込んでもらわないと。

以下は、ファイルをロックできなかった場合には一定時間ウェイトしてからファイルへの書き込みを試行する、というリトライ付きのログ書き出し関数の例。

[PHP] Proxyサーバー経由のアクセス元IPアドレスを取得する

$_SERVER配列にセットされる情報は、Proxyサーバーを経由するかしないかで若干変わってくる。

Proxyサーバーを経由しない場合

  • $_SERVER[‘REMOTE_ADDR’] – アクセス元のIPアドレス
  • $_SERVER[‘SERVER_ADDR’] – WebサーバーのIPアドレス

しかし、Proxyサーバーを経由する場合

  • $_SERVER[‘HTTP_X_FORWARDED_FOR’] – アクセス元のIPアドレス
  • $_SERVER[‘REMOTE_ADDR’] – ProxyサーバーのIPアドレス
  • $_SERVER[‘SERVER_ADDR’] – WebサーバーのIPアドレス

以下に、現在利用しているサーバー(Nginx)における$_SERVER配列をダンプしておく。

[PHP] Smartyで単純ループを使う

Smartyで単純ループさせるには以下のようにする。

これはPHPのforループで表現するなら以下と同等。

以下に、ループを使って年月日のセレクトボックスをSmartyで定義した例を示す。

select_00

参考サイト

{section},{sectionelse} | Smarty
http://www.smarty.net/docsv2/ja/language.function.section.tpl

[PHP] XAMPP環境でXdebugを使う

XdebugはPHP用デバッガー&プロファイラーツール。

Xdebug – Debugger and Profiler Tool for PHP
http://xdebug.org/

最新のXAMPPには同梱されているけど、XAMPPをインストールしただけでは有効にはならない。

Xdebugを有効にするには

php.iniを書き換えることでXdebugを有効にできる。

php.iniには既にデフォルトの設定が書き込まれてコメントアウトされている。

行頭のセミコロンを削除して xdebug.remote_enable = 0 を 1 に変更する (プロファイラを使わないのならば xdebug.profile_xxxxx はコメントアウトしなくてもよい)。その後、Apacheを再起動する。

Xdebugが有効になったか確認する

phpinfo() の出力に xdebug が含まれていれば有効になっている。

phpinfo() ではオプション設定も表示される。結構沢山のオプションがある。

XAMPP-1.8

NetBeansでのXdebugの使用

[ツール]-[オプション]メニューを選択し、[PHP]オプションの[デバッグ]タグで、[デバッガ・ポート]が9000になっていることを確認する。

9000番がデフォルトのポート番号だけど、php.iniのxdebug.remote_portオプションで異なるポートを指定することもできる。オプションの現在値はphpinfo()を見れば知ることができる。

options_00

簡単なプロジェクトを作成してブレークポイントを設定してデバッグセッションを開始し、処理がブレークポイントで止まればデバッガがちゃんと機能している。

デバッグセッションを開始した後、ステータスバーに以下のメッセージがずっと表示されている場合には、[デバッガ・ポート]の指定が実際のデバッガの設定と異なっていることが考えられる。

[PHP] RSSフィードの形式を調べる

コンテンツ配信系のウェブサイトで更新情報をRSSで配信するニーズあり。PHPのプログラミングとは直接関係ないが、PHPでサービスを実装するための予備知識としてRSSに関してざっくり勉強。

基本的には単なるXMLファイルなので、書式に関しては新たに勉強するほどのことは無いけど、RSSに特化した要素やオプションの類は理解が必要。

RSSフィードの生成はサーバー上で行うようにCMSを改良するか、コンテンツのデータベースからRSSフィードを生成するソフトを作成してcronで実行するか、などケースバイケース。

RSS2.0 RSSファイルを作る RSS配信
http://mrs.suzu841.com/rss20/

RSS Tutorial
http://www.w3schools.com/rss/default.asp

以下は2005年に執筆されたちょっと古い記事だけど、ブログでのRSS利用に関してわかりやすい。

Blogを支えるテクノロジー:第1回 RSSの要約配信はさらに加速する (1/6) – ITmedia エンタープライズ
http://www.itmedia.co.jp/enterprise/articles/0504/08/news051.html