PHPとMySQLの構成における日本語文字化けをPHPで対策する方法

PHP 5.4.xとMySQL(5.6.20)の構成で、PHPから日本語をデータベース内に保存したところ、phpMyAdmin上でその日本を見ると文字化けしてしまいました。逆に、phpMyAdmin上で入力した日本語はPHPからクエリして表示すると「???」になってしまいハマった対策を残します。尚、データベースに入出力した以外の日本語文字列は問題ありませんでした。

これが発生した環境は、XAMPP、NetBeasn、PHPファイルともにUTF-8を扱えるように設定済み、MySQL内のデータベースは、照合順序は「utf8_unicode_ci (UNICODE(多言語)、大文字小文字を区別しない)」で作成したデータベースといった環境です。

専用サーバーであればMySQLのmy.confを編集して修正するのが簡単ですが、共用サーバーとなるとその方法での対策は難しいのでPHP側で対策する方法を紹介します。

 

≪対策≫

クライアントの文字セットをmysql_set_charset関数を利用してUTF-8に設定すれば良い。

// データベースに接続
$link = mysql_connect('localhost', 'root', '');
// クライアントの文字セットを設定
mysql_set_charset('utf8', $link);

※上記サンプルはエラー処理は考慮されていません。

 

ただし、PHPマニュアルによるとこの方法はPHP 5.5.0より下図の通り非推奨になったとのこと。

PHP 5.5.0以降で開発する場合は、紹介されている代替の方法を採用してください。

mysql_set_charset

 

≪注意≫

この対策をネット調査している際に、データベースに対し、


SET NAMES UTF8

とクエリを実行して文字セットを変更したら日本語の文字化けが解消したと対策を紹介されています。

確かにこの方法でも対策は出来、以前はこの方法が一般的だったようですが、SQLインジェクションの脆弱性があることが判明しているので推奨されません。

 

Read More

PHPのrequire / require_once / include / include_onceの使い分け

PHPでは、外部ファイルを読み込む構文として「require」や「include」があります。また、同一のファイルの複数回読み込みを防止した「XXX_once」付などもあります。

それらを使い分けは下表を参照してください。

 

構文 同一外部ファイルの複数回読み込み ファイル未存在時
require Fatal Error
require_once × Fatal Error
include Warning
include_once × Warning

 

Read More

auxak コーディング規約

auxakでは、開発効率の向上と保守性の高い可読性の良いプログラムを開発するため、以下に定める各プログラミング言語のコーディング規約に基づきコーディングを行うものとする。

 

≪PHP≫

www.php-fig.orgが定めたPHPのコーディング規約である「Proposing a Standards Recommendation(PSR)」に準拠ものとする。

株式会社インフィニットループの技術ブログにて日本語訳が公開中。

 

[補足]

変数の命名規約

PSRでは、変数の命名規約に関して指定の記法は推奨しておらず、合理的な範囲内で一貫性の記述であれば”$StudlyCaps”、”$camelCase”、”$under_score”のどの記法でも良いとされています。そのため、auxakでは”$under_score”を変数名の命名規約に採用するものとする。

(参考:PSR-1, 4. Class Constants, Properties, and Methods, 4.2 Properties)

$age;
$first_name;

 

単一行コメント

「//」を用いで記述する。「//」とコメントの先頭文字との間にはスペースを1文字挿入すること。

// single-line comment

 

ブロックコメント

複数行に渡るコメントはコメントブロック(「/* <コメント> */」)を用いる。

「/*」及び「*/」はそれ単体で1行として記述し、その間に記述した「*(アスタリスク)」で始める行に記述する。

「*」とコメントの先頭文字との間にはスペースを1文字挿入すること。

「*」の位置を統一すること。

/*
 *  block comment
 */

 

≪データベース≫

テーブル名称

・複数形の英単語で命名する。但し、不加算名詞は例外とする。

・アルファベットは、全て小文字で表記する。

・複数の英単語で構成される名称は、スネークケースで表記する。

 

フィールド名称

・単数形の英単語で命名する。

・アルファベットは、全て小文字する。

・複数の英単語で構成される名称は、スネークケースで命名する。

・主キーは、「id」とする。

・外部キーは、「<参照元のjoinテーブル名称の単数形の英単語>_id」とする。

・DATE型の場合、

末尾に「_at」を付加する。過去の日時を表現する場合は、過去形で「xxxed_at」のように命名する。

・BOOLEAN型の場合、下表のような、「~able」や受動態、形容詞を使った名称とする。

xxx_accepted 承認されている
xxx_allowed 許可されている
xxx_available 利用可能である
xxx_canceled キャンセルされている
xxx_capable 可能である
xxx_enabled 有効にする
xxx_present 存在する
xxx_suspended 一時停止されている
xxx_valid 有効である
xxx_visible 表示可能である

 

≪HTML≫

後報

 

≪CSS≫

後報

 

≪JavaScript≫

後報

 

Read More

ロリポップ上にGitサーバーを構築してSourceTreeで利用する方法

ロリポップのチカッパプランは、SSHをサポートしているので分散型バージョン管理システムのGit利用できることを知りました。GitHubを使うという手もありましたが、商用利用の場合はランニングコストが発生したり無償利用の場合にはソースを公開しなくてはいけないなど不都合があったため契約中のレンタルサーバーへ自身のGitサーバーを構築することにしました。

今の時代、ソフトウエア開発をする上でバージョン管理システムは必須とも言えます。本業では、MicrosoftのTeam Foundation ServerやVisual Source Safeを利用していてGitという名前は良く耳にしていましたが正直今まで無縁な存在でした。

Gitサーバーを構築した過程のメモを忘れないようにメモとして残します。私は、コンソールからコマンドで操作するのはあまり好きでないので、Gitサーバー構築後のテストはGUIベースでGit操作が可能なSouceTreeをインストールして試してみます。

 

[今回使用するLinuxコマンド]

pwd:現在のディレクトリの場所を確認する。

cd:ディレクトリを移動する。

mkdir:ディレクトリを作成する。

touch:新規に空のファイルを作る。本来は、ファイルのタイムスタンプを変更するために利用する。

ls:ファイルやディレクトリの情報を表示する。

 

ロリポップのユーザー専用ページで[WEBツール]-[SSH]よりSSHを有効にする。

 

ターミナルエミュレータで (私はTera Term利用)でSSH接続する。

 

”Tera Term:新しい接続”画面は以下の通り設定する。

-接続方法:TCP接続

-ホスト:ロリポップ専用ページのSSH画面に表示されたサーバー(ssh***.lolipop.jp)

-TCPポート:ロリポップ専用ページのSSH画面に表示された接続ポート

 

”SSH認証画面”では以下の通り認証情報を入力する。

-ユーザー名:ロリポップ専用ページのSSH画面に表示されたアカウント

-パスフレーズ:ロリポップ専用ページのSSH画面に表示されたSSHパスワード

 

「$ pwd」コマンドを実行し現在いるディレクトリ階層を確認。

/home/user/N/lolipop.jp-***

 

「$ mkdir git」コマンドを実行しgit用ディレクトリを作成。

 

「$ cd git」コマンドを実行し作成したgit用ディレクトリへ移動。

 

「$ git init」コマンドを実行しGitリポジトリを作成します。

Initialized empty Git repository in /home/users/N/lolipop.jp-***/git/.git/

※赤色の文字列がリポジトリのパス。後で必要になるのでメモしておくこと。

 

「$ touch .gitignore」コマンドを実行し、Git管理対象外のファイルを指定するファイルを作成します。

 

「$ ls -a」コマンドを実行しgitディレクトリ内に、「.git」と「.gitignore」のファイルが存在することを確認します。

ファイル名の先頭が「.(ドット)」で始まるドットファイルを表示するために「-a」をお忘れなく。

.  ..  .git  .gitignore

 

※ここまででGitサーバーの準備は完了。

 

SouceTreeをダウンロードしてインストールします。

-インストール時表示されるライセンス同意画面内の[改行の自動処理を設定する(推奨)]オプションにはチェックを入れる。

-BitBucketやGitHubのアカウントを作成するか聞いてきますが、自身のGitサーバーを利用するのでスキップ。

-「SSHキーを読み込みますか?」の質問には[No]を選択する。

 

SouceTreeを起動し、[新規 / クローンを作成する]を選択。

 

[リポジトリをクローン]のタブを開き以下のように設定を入力して[クローン]を押す。

-元のパス:ssh://<アカウント>@<サーバー>:<接続ポート>/home/users/N/lolipop.jp-***git/.git/

※ロリポップ専用ページのSSH画面に表示された内容と「$git init」コマンドを実行時表示されたリポジトリのパスを利用する。

-保存先のパス:任意のローカルリポジトリの保存先

-ブックマーク, リポジトリをブックマーク:チェック

-ブックマーク, 名前:任意(SourceTree画面内のツリーで表示される名前)

-ブックマーク, フォルダ:「ルート」

 

以上で、無事にロリポップ上にGitサーバーを構築して、SourceTree上でGitを操作する準備が整いました。

SourceTree auxak Repositry

Read More

WindowsにおけるPHP開発環境の構築

PHPでアプリケーションをWindows上で開発するため環境を構築します。

 

ローカル環境で、PHPのコーディングから実行、デバッグを行うには以下のソフトウェアが必要です。

PHP自体は、テキストファイルなので最低メモ帳等のテキストエディタがあればコーディングは出来ますし、あとWebサーバーとブラウザがあれば実行できます。ただ、開発効率を考えたとき、よっぽどの理由がない限り、統合開発環境(IDE)も合わせて導入することを強くおすすめします。

◎Webサーバー (Apache)

◎PHP

△DBサーバー (MySQL)

△統合開発環境(IDE)

(◎:必須、△:任意)

 

いろいろと調査した結果、XAMPP(ザンプ) + NetBeansという組み合わせを採用することにしました。

 

XAMPPに関してはPHP開発環境を構築する上でこれをインストールしておけば間違いないという鉄板の必須ソフトウェアです。

XAMPPはWindows用で、Linux用にはLAMP(ランプ)、Mac OS X用にはMAMP(マンプ)とOS別にパッケージが提供されています。

通常、Apache、PHP、MySQL等は個別インストールが必要ですが、XAMPPを使うとそれらを一括インストール出来るので非常に便利です。

配布先のApache Friendsの言葉を引用すると、XAMPPとは以下の様なソフトウェアです。

 

XAMPP とは?
XAMPP は最も人気のある PHP 開発環境です。

XAMPP は、完全に無償で MySQL、PHP、および Perl を含んだ、簡単にインストールできる Apache ディストリビューションです。

XAMPP オープン ソース ・パッケージは、インストールと利用が非常に簡単できるよう設定されています。

 

なぜ XAMPP を使うのか?
・最も人気のある PHP dev パッケージであること
・Windows、Mac OS X & Linux をサポート
・インストールと設定が簡単
・完全に無償

 

一方、統合開発環境(IDE)ですが、数あるIDEの中から最終的にNetBeasnを選択しました。

優秀な有償のPHP用の統合開発環境(IDE)もありましたが、導入コストは押さえたいので無償の統合開発環境(IDE)という観点で選択しました。

本業では、MicsoftのVisual Studioを利用しているので、それが使えれば慣れた環境で良かったのですが、Visual StudioでPHPを開発するための拡張機能「PHP Tools for Visual Studio」は無料のExpressエディションには導入不可。また、PHP Tools for Visual Studioは無償のBASICと有償のPROFESSIONALに2つのエディションがあり、BASICエディションでは構文の色分け(シンタックスハイライト)機能といった基本的な機能しか使えず、PROFESSIONALエディションでないと補完機能が利用できない等の理由で却下しました。

Javaの開発環境として有名な拡張性の高いEclipseも有力候補でしたが、NetBeasnの方が補完機能が優れる、軽量動作、公式の日本語サイトが存在し公式資料が数多く提供されている等の理由で、NetBeansを選択しました。

 

各ソフトウェアは以下より無償でダウンロードすることが出来ます。

XAMPP

NetBeans ※PHPのNetBeansバンドルをダウンロードしてください。

 

[XAMPPインストールメモ]

XAMPP ※v1.8.3のインストーラーの場合

・Antivirusの確認画面は[OK]を押す。

・User Account Control(UAC)の警告画面は[Yes]を押す。

・Select Componentsウィザードでは下図の通りコンポーネントを選択する。

XAMPP Installation Select Components

・Installation folderウィザードでは、デフォルトの「C:\xampp」のまま利用。

・Bitnami for XAMPPウィザードでは、[Learn more about Bitnami for XAMPP]のチェックを外す。

・インストール後、<XAMPPインストールフォルダー>\php\php.iniを以下の通り編集する。

≪タイムゾーン設定≫

「date.timezone=Europe/Berlin」 ⇒ 「date.timezone=Asia/Tokyo」

≪日本語関係設定≫

「;default_charset = “UTF-8″」 ⇒ 「default_charset = “UTF-8″」

「;mbstring.language = Japanese」 ⇒ 「mbstring.language = Japanese」

「;mbstring.internal_encoding = EUC-JP」 ⇒ 「mbstring.internal_encoding = UTF-8」

≪Xdebug設定≫

「;zend_extension = “C:\xampp\php\ext\php_xdebug.dll」 ⇒ 「zend_extension = “C:\xampp\php\ext\php_xdebug.dll”」

≪リモートデバッグ設定≫

「;xdebug.remote_enable = 0」 ⇒ 「xdebug.remote_enable = 1」

≪FileInfo拡張モジュール設定≫

「;extension=php_fileinfo.dll」 ⇒ 「extension=php_fileinfo.dll」

・ ApacheとSkypeが共存する場合、Skype初期設定ではポート80を利用するようになっているためApacheの起動が失敗する。この場合、Skypeの設定画面を開き[詳細]-[接続]の[追加の受信接続にポート80と443を使用]のチェックを外しSkypeを再起動する。これで、ポート80が空くのでApacheが起動可能となる。尚、ポート80をIISやWindowsが利用している場合もApacheの起動に失敗するので、どちらかのポート番号を変更する等の対応が必要となる。

・XAMPPのphpコマンド(php.exe)をコマンドプロンプトでフルパス指定しなくても使えるように「C:\xampp\php\」をシステム環境変数のPathへ追加する。

 

NetBeans

・NetBeansのインストールにはJava Platform (JDK)のインストールが必要。

・NetBeansのインストール手順はNetBeansの公式サイトにバージョン毎に公開されています。

・基本的に、インストールウィザードに従い全てデフォルトのインストールオプションでインストールを完了します。

・日本語の文字化け対策として、NetBeansのデフォルトのエンコーディングをUTF-8へ変更します。NetBeansが起動していない状態で、<NetBeansインストールフォルダ>\etc\netbeans.confを開き、netbeans_default_options に 下図の赤枠内のように「-J-Dfile.encoding=UTF-8」を追記し保存します。

NetBeans_DefaultEncoding

 

Read More

auxak システム開発プロセス

auxakにおけるシステム開発のプロセスを検討しました。個人や小規模開発の場合は、システム開発のプロセスを明確にしなくても何とかなってしまうこともありますが、将来的な大規模開発や分業を考慮した場合、システム開発のプロセスを明確にしておくことは必須でしょう。

調べてみるとやはりウォーターフォールモデルが一般的で安全なようですが、これからスタートアップするシステムのような場合には仕様が100%決定しにくい点や仕様変更に柔軟に対応したい点から工程を前後しながら試行錯誤のうえシステム開発をする可能性がありますが、ウォーターフォール・モデルでは基本的に前工程に戻るのはNGのため不向きな感じが否めません。ただ、受託開発をする場合には、各工程が明確に分割してスケジューリングできるため見積もり金額を明確にしやすい点でウォーターフォール・モデルは優れていると思います。

そこで、私なりにウォーターフォールモデルにアジャイルの概念を導入した独自のシステム開発プロセスを設計しました。

プロジェクトの最初と最後、また大きなフローはウォーターフォール・モデルですが、設計や実装、テスト等の工程はスプリントとしてグループ化し、フィードバックを反映してスプリントを繰り返すことで仕様変更への柔軟性を確保しました。

まだまだ、改良の余地が多々あるシステム開発プロセスですが運用する中で少しずつ改善をしていこうと思います。

 

ダウンロード先:auxak システム開発プロセス Rev.A(初版)

Read More

Windows用ターミナルエミュレータの導入(Tera Term)

SSH(Secure Shell)によるターミナルエミュレータを必要とした作業をしたかったので、Windows用ターミナルエミュレータを導入しました。

ターミナルエミュレータは、サーバ機器やネットワーク機器を遠隔操作するための端末として動作するソフトウェアのことです。それら機器とはシリアルやイーサネットにより接続され、後者の場合、SSH(Secure Shell)Telnetrlogin等の機能を利用しTCP/IPを介し通信が行われます。(詳細は、Wikipediaの端末エミュレータを参照)

Windows用ターミナルエミュレータといえば、以前はハイパーターミナルというソフトウェアが標準で同梱されていたのですが、Windows7以降無くなってしまったため、自身でインストールする必要があります。

今回は、Windows用ターミナルエミュレータとして定番なTera Termといフリーソフトウェアを導入しようと思います。

現在、Tera Termはオープンソース化されており、SourceForgeからダウンロードすることが可能です。

Tera Term

2014年8月現在、4.83というバージョンが最新です。リリース履歴を見ると数か月毎に最新版がリリースされているようなので定期的にウォッチしてみると良いかもしれません。

インストールや使い方に関しては、ダウンロード先に公式情報として紹介されているのでそちらを参考にしてみて下さい。

尚、インストールの途中で「コンポーネントの選択」画面でインストールコンポーネントの選択を要求されます。私はSSHによる接続を利用したかったので、「TTSSH」が必要となりました。SSH利用のための必須コンポーネントなので必要な方はお忘れなく。標準インストールの対象コンポーネントなので、私はとりあえず標準インストールでインストールを行いました。

Read More

Google ウェブマスターツールへのサイト登録と所有権の確認

Google ウェブマスターツールにauxak blogをしてみようと思います。

Google ウェブマスターツールは、Googleが提供する無料のサービスです。サイト登録することでGoogleの検索結果に表示されやすくなったりgoogleが所有するサイトへのアクセスデータ等を入手してウェブ解析に役立てることが出来ます。

ウェブマスターツールの公式ヘルプに寄ればサイト登録により以下のことが出来るようになるそうです。

Google 検索結果でのサイトのパフォーマンスを監視できます

  • 必ず Google が自分のコンテンツにアクセスできるようにする
  • クロール対象の新しいコンテンツを送信し、検索結果に表示したくないコンテンツを削除する
  • 人目を引く検索結果を提供するコンテンツを作成し、監視する
  • 検索パフォーマンスへの影響を最小限に抑えながらサイトを維持する
  • マルウェアやスパムの問題を監視し、解決することでサイトを常に正常な状態に維持する

Google 検索や世界中のユーザーからサイトがどのように見えているかを知ることができます

  • 自分のサイトがどのようなクエリで検索結果に表示されているか?
  • 一部のクエリが他のクエリよりも自分のサイトへのトラフィックを増やす結果となっているか?
  • 商品の価格、会社の連絡先情報、イベントがリッチ検索結果で強調されているか?
  • どのサイトが自分のウェブサイトにリンクしているか?
  • モバイル サイトがモバイルで検索するユーザーに対して適切に表示されているか?

※Google ウェブマスターツールに関する詳細は、Googleの公式ヘルプを「Google ウェブマスターツールとは」を覗いて見て下さい。

 

それでは、サイト登録を進めて始めていきます。

まず、Google ウェブマスターツールにアクセスします。Google ウェブマスターツールを利用するためにはGoogle アカウントでログインする必要があります。google アカウントを持っていない場合は事前に準備しておいてください。

ホーム内の[サイトを追加]ボタンをクリックします。

Google ウェブマスターツール サイトを追加

追加したいサイトのURLを入力します。

Google ウェブマスターツール URL入力

サイトの追加が完了するとそのサイトの所有権の確認を行う必要があります。

確認方法には、次の方法が提供されています。

  1. HTMLファイルをアップロード (HTML ファイルをサイトにアップロードします)
  2. HTMLタグ (メタ タグをサイトのホームページに追加します)
  3. ドメイン名プロバイダ (ドメイン名プロバイダにログインします)
  4. Google アナリティクス (Google アナリティクス アカウントを使用します)
  5. Google タグマネージャ (Google タグマネージャ アカウントを使用します)

auxak blogでは、Googleが推奨するHTMLをファイルをアップロードする方法を採用しました。

あとは、画面の指示に従いダウンロードしたHTMLファイルをサイトにアップロードしていけば所有権の確認は完了です

Google ウェブマスターツール サイトの所有権の確認

 

以上で、サイトは無事にGoogle ウェブマスターツールに登録することが出来ました。

Read More