jQuery, jQueryUI, Bootstrap利用時のCDNフォールバック対応 

コンテンツデリバリーネットワーク(CDN)を利用した、jQueryやjQuery UI、BootstrapのJavaScriptファイルやCSSファイルの読み込みが失敗した際のフォールバックの方法は以下の通りです。


<!-- JQueryの読み込み -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="venders/jquery/2_1_1/jquery-2.1.1.min.js"><\/script>');</script>

<!-- JQuery UI(.css)の読み込み -->
<link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
<div class="ui-helper-hidden"></div>
<script>
    // jQuery UI CSS Fallback
    $(function () {
        if ($('.ui-helper-hidden:first').is(':visible') === true) {
            $('<link rel="stylesheet" type="text/css" href="venders/jquery_ui/1_11_2/jquery-ui.min.css" />').appendTo('head');
        }
    });
</script>

<!-- JQuery UI(.js)の読み込み -->
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<script>window.jQuery.ui || document.write('<script src="venders/jquery_ui/1_11_2/jquery-ui.min.js"><\/script>')</script>

<!-- Bootstrap(.css)の読み込み -->
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script>
    // Bootstrap CSS Fallback
    $(function () {
        if ($('body').css('color') !== 'rgb(51, 51, 51)') {
            $('<link rel="stylesheet" type="text/css" href="venders/bootstrap/3_3_0/css/bootstrap.min.css" />').appendTo('head');
        }
    });
</script>

<!-- Bootstrap(.js)の読み込み -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script>$.fn.modal || document.write('<script src="venders/bootstrap/3_3_0/js/bootstrap.min.js"><\/script>')</script>

Read More

CodeIgniter 3.0-dev 導入手順

CodeIgniter

※この記事は、CodeIgniter-3.0-devを対象に書かれています。
最近、PHPで開発するにあたりパーフェクトPHPという本を参考にフレームワークの勉強をしていました。
PHPは様々なフレームワークが存在し、正直どれにしようか迷いに迷ってました。
小規模な開発目的なので、国内ユーザーが多いCakePHPや新しめのFuelPHPなども比較的良かったのですが、
フレームワーク独自の縛りが多く、個人的にはある程度プログラマーの裁量で取り回しが可能なものが良かったので、
学習コストの少ない軽量な高速なCodeIgniterというフレームワークが良さそうだったのでサーバーにインストールしてみることにしました。
正直、CodeIgniterは日本ではマイナーな様ですが海外では利用実績も多いようで、
公式サイトのマニュアルやフォーラムなど結構充実しており、
基本英語ですがそれほど難しい英語ではないので日本語資料が少ないという問題点はあまり気にしなくても良いのではないかと思います。
尚、本記事でインストールしたCodeIgniterのバージョンは、3.0-devというリリース前の開発段階のものです。
公式サイトによれば、既にかなり動いているようで実運用でも利用しているケースがあるらしいので、
これから新規に開発するウェブアプリケーションであれば、サポート基幹的にもCodeIgniterは新しいものが良いと考えたので、
とりあえず、3.0-devで利用して正式リリース後にバージョンアップしたいと思います。

参考ウェブサイト

インストール手順

1. CodeIgniterダウンロード

CodeIgniter公式ウェブサイトからCodeIgniterのZipファイルをダウンロードします。

 

2. Zipファイルを展開します。

ダウンロードしたZipファイルを展開します。Zipファイル内は以下の構成になっています。
└─CodeIgniter-develop
  │  .gitignore
  │  .travis.yml
  │  composer.json
  │  contributing.md
  │  DCO.txt
  │  index.php
  │  license.txt
  │  phpdoc.dist.xml
  │  readme.rst
  │
  ├─application
  ├─system
  ├─tests
  └─user_guide_src

3. CodeIgniterアップロード

CodeIgniter-developフォルダー内の全ての(applicationフォルダー、systemフォルダー、testsフォルダー、etc…)と全てのファイル(index.php、etc…)をCodeIgniter-developフォルダー内の構成を保ったまま、サーバー上のウェブサイトのルートディレクトリへアップロードします。
ルートディレクトリにindex.phpが配置されていれば正しくアップロードされています。

4. アプリケーション設定

application/config/config.phpをテキストエディターで開きます。
以下の行(56行目)を探し、ウェブサイトのベースURLを設定します。
$config['base_url'] = '';
$config['base_url'] = 'http://example.com/';
暗号化やセッションを利用する場合は、以下の行(335行目)を探し暗号化キーを設定します。
大文字や小文字、数字が混在した32バイト(128ビット)を設定することで暗号化アルゴリズムを最大限に利用することが出来ます。
$config[‘encryption_key’] = ”;

5. データベース設定

データベースを利用する場合、application/config/database.phpをテキストエディターで開き、利用するデータベースの情報を設定(99行目から123行目)します。
$active_group = 'default';
$query_builder = TRUE;$db['default'] = array(
'dsn'     => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'autoinit' => TRUE,
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

[補足]

・CodeIgniter関連ファイルの場所を隠すことによってセキュリティを高めたい場合には、applicationフォルダーとsystemフォルダーを任意の名称へ変更します。名称を変更をした場合には、ルートディレクトリのindex.phpをテキストエディターで開き、$system_path変数(101行目)と$application_folder変数(116行目)へ反映して下さい。
/*
*---------------------------------------------------------------
* SYSTEM FOLDER NAME
*---------------------------------------------------------------
*
* This variable must contain the name of your "system" folder.
* Include the path if the folder is not in the same directory
* as this file.
*/
$system_path = 'system';

/*
*---------------------------------------------------------------
* APPLICATION FOLDER NAME
*---------------------------------------------------------------
*
* If you want this front controller to use a different "application"
* folder than the default one you can set its name here. The folder
* can also be renamed or relocated anywhere on your server. If
* you do, use a full server path. For more info please see the user guide:
* http://codeigniter.com/user_guide/general/managing_apps.html
*
* NO TRAILING SLASH!
*/
$application_folder = 'application';
・さらにセキュリティ高めたい場合は、ブラウザーから直接アクセス出来ないルートディレクトリより上位などのアプリケーションフォルダーの外部へapplicationフォルダやsystemフォルダー、viewsフォルダーを移動します。これに伴い、.htaccessファイルやindex.phpの編集方法はInstallation Instructionsを参照して下さい。
・(index.phpで宣言されている)ENVIRONMENT定数を切り替えることで、開発環境と運用環境を切り替えることが可能です。
/*
*---------------------------------------------------------------
* APPLICATION ENVIRONMENT
*---------------------------------------------------------------
*
* You can load different configurations depending on your
* current environment. Setting the environment also influences
* things like logging and error reporting.
*
* This can be set to anything, but default usage is:
*
*     development
*     testing
*     production
*
* NOTE: If you change these, also change the error_reporting() code below
*/
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

Read More

XDebugを利用してNetBeansでPHPをデバッグするための環境構築

PHPのデバッグを効率化するために、NetBeansにXDebugを利用したPHPのデバッグ環境を整えます。 これにより、PHPの処理を任意の位置に設置したブレークポイントで中断し変数値を確認したり、ステップ実行で処理を追いかけることが可能となります。

PHP開発環境の準備

XAMPPとNetBeansをインストールしてそれらが利用出来る環境を整えます。未だの場合は、コチラを参照して下さい。

XDebugダウンロード

Windows用のXDebugのバイナリファイルをXDEBUG EXTENSION FOR PHPのダウンロードページからダウンロードします。

XDebugのバージョンは最新のバイナリファイルをダウンロードするのが良いでしょう。ただ同一XDebugのバージョンでも、OSのプラットフォーム(32bit or 64bit)、PHPのバージョン、スレッドセーフ(IISやApache worker MPMでPHPを実行する場合のZend Thread Safety(ZTS))対応有無により複数のバイナリファイルが公開されています。開発環境にあった適切なバイナリファイルをダウンロードして下さい。 ダウンロードしたバイナリファイルは、<XAMPPインストールフォルダ>\xampp\php\ext内に保存します。

適切なバイナリファイルを利用しないとXAMPPがそのバイナリファイルを読み込めずXDebugが有効になりませんので注意が必要です。

 

ただ、実は適切なバイナリファイルを確実な方法で選択しダウンロードする方法があるので今回はこの方法を採用します。

バイナリファイルの配布先であるXDEBUG EXTENSION FOR PHPのWebサイトでは、phpinfo()が出力するHTMLソースからOSプラットフォーム、PHPバージョン、スレッドセーフ有無等を解析し、環境にあった適切なバイナリファイルのダウンロードURLを示してくれる親切な機能が提供されています。

XAMPPを起動させた状態で、http://localhost/xampp/phpinfo.phpにアクセスしてその全てのHTMLソースをコピーします。

次に、Xdebug: Support; Tailored Installation Instructionsにアクセスし赤枠内にコピーしたHTMLソースを貼り付け、[Analyze my phpinfo() output]をクリックします。

Xdebug-Support-Tailored Installation Instructions-form

 

すると、phpInfo()の内容が解析され、赤枠内のINSTRUCTIONSにバイナリファイルのダウンロード先とphp.iniに追記すべき情報を示してくれます。

この指示に従い、バイナリファイルをダウンロードして下さい。

Xdebug-Support-Tailored Installation Instructions-Instructions

php.iniの編集

<XAMPPインストールフォルダ>\xampp\php\php.iniを開き、XDebugセクションを以下の通り編集し保存します。

まず、「;report_zend_debug = 0」のコメントアウトを外します。


; This setting is on by default.
;report_zend_debug = 0

2行目先頭のセミコロンを削除して以下の様にする。


; This setting is on by default.
report_zend_debug = 0

次に、XDebugセクションを探し、以下の通りに追加及び編集します。zend_extensionキーには、先のINSTRUCTIONSで示された情報を記載します。

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug-2.2.5-5.5-vc11.dll"
xdebug.remote_enable = On
xdebug.remote_handler = "dbgp"
xdebug.remote_mode = "req"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_port = "9000"
xdebug.trace_output_dir = "C:\xampp\tmp"

XDebugの有効化確認

XAMPPを再起動させ、http://localhost/xampp/phpinfo.phpにアクセスします。下図のようにXDebugの情報が表示されていればXDebugの有効化は成功です。

phpInfo-xdebug

NetBeans設定

NetBeasnを起動し、メニューバーから[ツール] – [オプション]を開きます。

PHPのデバッグタブを開き、デバッガ・ポートに、php.iniにおいて、xdebug.remote_portに指定したポート番号を設定し保存します。

xdebug.remote_port = "XXXX"

NetBeans-option-debug-port

 

以上で、XDebugを利用してNetBeasnでPHPをデバッグするための環境構築は完了です。実行したいPHPプロジェクトの実行構成を設定し、デバッグ機能を実行してみて下さい。

 

 

Read More

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

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