Symfony2のapp/check.phpの環境チェックでエラーや警告が出たときの対処法について

WindowsでSymfony2を導入したときに、app/check.phpの環境チェックでエラーや警告が出たときの対処法ついてまとめました。

Symfony2のapp/check.phpの環境チェックでエラーや警告が出たときの対処法ついてまとめた。

環境

開発環境のバージョンは次の通り

  • Windows 10
  • PHP 5.6.17

PHPは、「C:\php」にインストールした。
php.iniは「php.ini-development」をコピーした。

date.timezone setting must be set

* date.timezone setting must be set
  > Set the "date.timezone" setting in php.ini* (like Europe/Paris).

このエラーが出たときは、「php.ini」の次の行を修正する。
文頭の「;」を削除し、文末に「”Asia/Tokyo”」を追加する。

;date.timezone =
date.timezone = "Asia/Tokyo"

mb_strlen() should be available

* mb_strlen() should be available
  > Install and enable the mbstring extension.

このエラーが出たときは、「php.ini」の次の行を修正する。
文頭の「;」を削除する。

;extension_dir = "ext"
extension_dir = "ext"

;extension=php_mbstring.dll
extension=php_mbstring.dll

次の行を修正する。
文頭の「;」を削除する。

;mbstring.language = Japanese
mbstring.language = Japanese

次の行を修正する。
文頭の「;」を削除し、文末に「UTF-8」を追加する。

;mbstring.internal_encoding =
mbstring.internal_encoding = UTF-8

mbstringの他の設定は省略。

intl extension should be available

* intl extension should be available
  > Install and enable the intl extension (used for validators).

次の行を修正する。
文頭の「;」を削除する。

;extension=php_intl.dll
extension=php_intl.dll

a PHP accelerator should be installed

 * a PHP accelerator should be installed
  > Install and/or enable a PHP accelerator (highly recommended).

次の行を追加する。
パスはPHPのインストール場所に合わせて書き換える。

zend_extension="C:\php\ext\php_opcache.dll"

次の行を修正する。
文頭の「;」を削除し、値を「0」から「1」に書き換える。

;opcache.enable=0
opcache.enable=1

;opcache.enable_cli=0
opcache.enable_cli=1

PDO should have some drivers installed (currently available: none)

* PDO should have some drivers installed (currently available: none)
  > Install PDO drivers (mandatory for Doctrine).

次の行を修正する。
文頭の「;」を削除する。

;extension=php_pdo_mysql.dll
extension=php_pdo_mysql.dll

;extension=php_pdo_sqlite.dll
extension=php_pdo_sqlite.dll

使用するデータベースを有効にする。
ここでは、MySQLとSQLiteを有効にしている。

実行結果

$ php app\check.php

Symfony2 Requirements Checker
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> PHP is using the following php.ini file:
  C:\php\php.ini

> Checking Symfony requirements:
  ........................................


 [OK]
 Your system is ready to run Symfony2 projects


Note  The command console could use a different php.ini file
~~~~  than the one used with your web server. To be on the
      safe side, please check the requirements from your web
      server using the web/config.php script.

改行コードを変換するNetBeans用プラグイン

Symfony2のコーディング規約では、改行コードにLF(0x0A)を使用することになっている。
NetBeansには改行コードを設定する方法がないので、次のプラグインを導入した。

Show and change line endings プラグイン

Show and change line endings プラグインは編集中のファイルの改行コードを表示してくれるプラグイン。
改行のコードの変更もできる。

画面右下に編集中のファイルの改行コードが表示され、クリックして改行コードを変更できる。

002

インストールは、メニューの「ツール」→「プラグイン」でプラグイン画面を開く。
「使用可能なプラグイン」タブを選択して、検索欄にプラグイン名「Show and change line endings」を入力する。

001

選択欄のチェックボックスをチェックして、「インストール」ボタンを押すと、インストールできる。

Change Line Endings on Saveプラグイン

Change Line Endings on Save プラグインはファイルを保存するときに改行コードを変換してくれるプラグイン。
ファイルの改行コードが設定した改行コードと異なるとき、設定した改行コードに変換してくれる。

使用方法は、メニューの「ツール」→「オプション」→「エディタ」→「Line Endings」タブを選択して、「Enable adjusting the line endings」をチェックし、改行コードを選択する。

005

インストールは、プラグイン画面で検索しても見つからなかったので、公式サイトからnbmファイルをダウンロードして、プラグイン画面の「ダウンロード済」タブからインストールする。

003

004

参考

NetBeansでSymfony2をインストールする

この記事はNetBeans 7.3とSymfony 2.2.1で動作を確認しました。

NetBeansはSymfony2をサポートしています。
この記事では、NetBeansでSymfony2の設定を行い、新規にSymfony2のプロジェクトを作成する手順を解説します。

  1. NetBeansをインストールする

    NetBeansのダウンロードのページから、PHPをサポートしているNetBeansをダウンロードします。

    NetBeansのダウンロードのページ

    ダウンロードが完了したら、インストーラを実行して、NetBeansをインストールします。

  2. Symfonyをダウンロードする

    Symfonyのダウンロードページから「Symfony Standard 2.2.1 (.zip)」をダウンロードします。

    Symfonyのダウンロードページ

  3. NetBeansのSymfony2の設定を行う

    NetBeansを起動します。

    メニューから「ツール」→「オプション」を選択します。

    「ツール」→「オプション」

    「PHP」→「Symfony2」を選択して、ダウンロードしたZipファイルのパスを設定します。

    「PHP」→「Symfony2」

    「OK」ボタンを押して、設定を登録します。

  4. NetBeansでSymfony2のプロジェクトを作成する

    メニューの「ファイル」→「新規プロジェクト」を選択します。

    「ファイル」→「新規プロジェクト」

    「カテゴリ」から「PHP」を選択して、「プロジェクト」から「PHPアプリケーション」を選択し、「次」ボタンを押します。

    新規プロジェクト

    プロジェクト名とソース・フォルダを設定して、「次」ボタンを押します。

    新規PHPプロジェクト

    プロジェクトURLを設定して、「次」ボタンを押します。

    新規PHPプロジェクト

    PHPフレームワークから「Symfony2 PHP Webフレームワーク」をチェックして、「終了」ボタンを押します。

    PHPフレームワーク

    プロジェクトが作成され、Symfony2が導入されます。

    010

StofDoctrineExtensionsBundleのインストール方法

この記事はSymfony 2.2.1で動作確認をしました。

Gitのインストール

Gitをインストールします。

環境変数を編集してパスを通します。

Composerのインストール

Symfonyのプロジェクトのディレクトリに、次のURLにあるファイルをダウンロードします。

https://getcomposer.org/installer

ダウンロードしたファイルを実行する

php installer

同じフォルダーに「composer.json」「composer.phar」ファイルが作られます。

次のコマンドを実行して、バージョン情報が表示されたら、インストールは成功しました。

php composer.phar --version

StofDoctrineExtensionsBundleのインストール

「composer.json」に次の表を追加します。

"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.2.*",
    …
    "stof/doctrine-extensions-bundle": "~1.1@dev",//<=追加
}

次のコマンドを実行すると、StofDoctrineExtensionsBundleがインストールされます。

php composer.phar install

「app/AppKernel.php」を編集して、次の行を追加します。

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        …
        new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),//<=追加
    );

「app/config/config.yml」を編集して、次の行を追加します。

stof_doctrine_extensions:
    orm:
        default:
            timestampable: true

「app/autoload.php」を編集します。

if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('Stof', __DIR__.'/../vendor/bundles');//追加
    $loader->add('Gedmo', __DIR__.'/../vendor/gedmo-doctrine-extensions/lib');//追加
}

Composerを使ってSymfony2をインストールする

この記事はSymfony 2.2.1で動作確認しています。

Composerをインストールする

ComposerはPHPのパッケージ管理ツールです。
Symfony2もComposerを使ってインストールします。

curlが使える場合は、次のコマンドを実行します。

curl -s http://getcomposer.org/installer | php

curlが使えない場合は、次のURLのファイルをダウンロードして、実行します。

https://getcomposer.org/installer

ダウンロードしたファイルを実行します。

php installer

しばらくすると「composer.phar」というファイルが作成されます。

次のコマンドを実行して、バージョン情報が表示されたら、インストールは成功しました。

php composer.phar --version

以上で、Composerのインストールが完了しました。

Symfonyをインストールする

Composerのインストールが終わったら、次のコマンドを実行します。

php composer.phar create-project symfony/framework-standard-edition Symfony2のインストールフォルダ 2.2.1

例:myprojフォルダーにインストールする場合

php composer.phar create-project symfony/framework-standard-edition myproj/ 2.2.1

必要なファイルがダウンロードされ配置されます。

以上でインストールが完了しました。

Symfony2のapp/console doctrine:database:createでMySQLデータベースの文字コードが設定されない

この記事はSymfony 2.2.1で確認しました。

次のコマンドでMySQLにデータベースを作成したとき、データベースの文字コードが設定されませんでした。

app/console doctrine:database:create

「app/config/config.yml」には次のようにデータベースの文字コードを設定してあります。

doctrine:
    dbal:
        …
        charset:  UTF8

次のようなSQLでデータベースが作成されることを期待していました。

CREATE DATABASE db_name DEFAULT CHARACTER SET UTF8

しかし、「SHOW CREATE DATABASE db_name」で作成されたデータベースを確認したところ、

CREATE DATABASE db_name

となっていました。

もしデータベースに格納した文字列が文字化けしていたら、データベースの文字コードが正しく設定されていない可能性があります。

「app/console」コマンドでデータベースを作成せず、直接SQLを発行した方がいいかもしれません。

PHPでセッションを破棄するコード

PHP徹底構築』にあった、セッションを破棄するコード。
よく使うことになりそうなので、メモ。

<?php
session_start(); //セッションを開始
$_SESSION = array(); //全てのセッション変数の登録を解除
if (isset($_COOKIE[session_name()])) { //クライアント側のセッションIDを破棄
    setcookie(session_name(), '', time() - 4200, '/');
}
session_destroy();  //サーバー側でのセッション破棄
echo "セッションを破棄し、ログアウトしました。";

クライアント側とサーバー側の両方のセッションをちゃんと破棄する。
どちらか一方だけ破棄して、もう一方を忘れてしまいがち。

なお、『PHP徹底構築』はとても良い本だと思う。
amazonでレビューが入っていないのが不思議。

PHPで指定したディレクトリのファイルの一覧を取得する

PHP5で導入されたDirectoryIteratorを使って、特定のディレクトリに含まれているファイル一覧を取得するコードです。
サブディレクトリのファイルを取得する方法も紹介します。

ディレクトリのファイルの一覧を取得する

//処理したいディレクトリのパス
$path = dirname(__FILE__);

$dir = new DirectoryIterator($path);
foreach ($dir as $file) {
    echo $file, PHP_EOL;
}

ディレクトリやファイルのパスとファイル名を取得する

パスとファイル名を取得するにはgetPathname()メソッドを使用します。

//処理したいディレクトリのパス
$path = dirname(__FILE__);

$dir = new DirectoryIterator($path);
foreach ($dir as $file) {
    echo $file->getPathname(), PHP_EOL;
}

‘.’ もしくは ‘..’を判定する

上のコードでは、’.’や’..’も含まれます。

‘.’や’..’を判定するにはisDot()メソッドを使用します。

//処理したいディレクトリのパス
$path = dirname(__FILE__);

$dir = new DirectoryIterator($path);
foreach ($dir as $file) {
    //'.'と'..'は表示しない
    if (!$file->isDot()) 
        echo $file, PHP_EOL;
}

ファイルとディレクトリを判定する

ファイルかどうかを調べるにはisFile()メソッド、ディレクトリかどうかを調べるにはisDir()メソッドを使用します。

//処理したいディレクトリのパス
$path = dirname(__FILE__);

$dir = new DirectoryIterator($path);
foreach ($dir as $file) {
    if ($file->isDot()) //'.'と'..'は表示しない
        continue;

    if ($file->isFile()) //ファイルの時
        echo $file, ' is File', PHP_EOL;

    if ($file->isDir()) //ディレクトリの時
        echo $file, ' is Dir', PHP_EOL;
}

サブディレクトリを含めたすべてのファイルを表示する

サブディレクトリを含めたすべてのファイルを表示するサンプルプログラムです。

/**
 * 指定したディレクトリとそのサブディレクトリのファイルを表示する
 * @param string $path ディレクトリのパス
 */
function showFiles($path) {
    $dir = new DirectoryIterator($path);
    $dirs = array();
    foreach ($dir as $file) {
        if ($file->isDot()) //'.'と'..'は表示しない
            continue;
        if ($file->isDir())
            $dirs[] = $file->getPathname();
        if ($file->isFile())
            echo $file->getPathname(), PHP_EOL;
    }
    //サブディレクトリのファイルを表示する
    foreach ($dirs as $dir) {
        showFiles($dir);
    }
}

//処理したいディレクトリのパス
$path = dirname(__FILE__);

//指定したディレクトリとそのサブディレクトリのファイルを表示する
showFiles($path);

PHP 5.2から導入されたfilter_var関数で入力された値を検証する

filter_var関数

PHP 5.2.0からfilter_var関数を使って値を簡単に検証できるようになりました。

メールアドレスの検証や、数値の範囲チェックなどの処理を一貫した書き方で記述できます。

filter_var関数の使用例を紹介します。

mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )

filter_var関数の最初の引数に検証する値、2番目の引数に検証方法を指定します。
2番目の引数に使用できる検証方法は「マニュアルの検証フィルタ」にまとまっています。

メールアドレスが正しいかどうかを検証する

$var = 'bob@example.com'; //検証するメールアドレス
if (filter_var($var, FILTER_VALIDATE_EMAIL) === false) {
  echo('メールアドレスが不正です。');
}

入力された値が整数かどうかを検証する

$var = '123'; //検証する値
if (filter_var($var, FILTER_VALIDATE_INT) === false) {
  echo('入力された値は整数ではありません');
}

入力された整数の範囲を検証する

filter_var関数の3番目の引数で範囲を指定します。

$var = '99'; //検証する値

$range = array(//検証する範囲
    'min_range'=>10, //最小値
    'max_range'=>20  //最大値
    ); 

if (filter_var($var, FILTER_VALIDATE_INT, array('options'=>$range)) === false) {
  echo('入力された値は範囲内の整数ではありません');
}

検証に失敗したときに返す値を指定できます。

$var = '99'; //検証する値
$options = array(
    'min_range' => 10, //最小値
    'max_range' => 20, //最大値
    'default' => 0 //検証に失敗したときに返す値
);
var_dump(filter_var($var, FILTER_VALIDATE_INT, array('options' => $options))); //=>0

複数の値をまとめて検証する

複数の値をまとめて検証するときはfilter_var_array関数を使用します。

//検証する値
$data = array(
    'email' => 'bob@@example.com',
    'age' => 120,
);
//検証方法
$args = array(
    //emlはメールアドレスがどうかを検証する
    'email' => FILTER_VALIDATE_EMAIL,
    //ageは18以上99以下の整数かどうかを検証する
    'age' => array(
        'filter' => FILTER_VALIDATE_INT,
        'options' => array(
            'min_range' => 18, //最小値
            'max_range' => 99, //最大値
        )
    )
);
var_dump(filter_var_array($data, $args));

実行結果

array (size=2)
  'email' => boolean false
  'age' => boolean false

Windows8にNetBeansでPHPの開発環境を作成する

NetBeansでPHPの開発環境を作成する手順をまとめた。

XAMPP for Windowsのインストール。

NetBeansにはPHPやApacheが含まれていないため、あらかじめ用意する必要がある。
XAMPP for Windowsで、PHP・Apache・MySQLをまとめてインストールする。

XAMPP for WindowsからXAMPP Windows版をダウンロードする。

XAMPP for Windows

ダウンロードしたら、プログラムを実行してインストールする。
インストールの設定は初期値のままで問題ない。

Xdebugの設定

初期設定ではXdebugは無効になっていて、NetBeansのデバッグ機能が使えない。

PHPの設定を変更し、Xdebugを有効にする。

PHPの設定ファイル(C:\xampp\php\php.ini)を開き、ファイルの終わりの部分にある[XDebug]のセクションを編集する。

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable = on
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "C:\xampp\tmp"

XAMPP Control PanelからApacheを実行し、エラーがないことを確認する。

XAMPP Control Panel

http://localhost/にアクセスし、XAMPP for Windowsの画面が表示されればOK。

http://localhost/

Javaのインストール

NetBeansを実行するにはJavaが必要になる。
あからじめJavaをインストールしておく。

java.comからJavaをダウンロードしてインストールする。

##NetBeansのインストール

NetBeansのサイトからPHP用のNetBeansをダウンロードします。

NetBeans

ダウンロードが完了したら、インストーラを実行してインストールする。

NetBeansの設定

NetBeansを起動して、メニューの「ツール」→「オプション」を選択する。

PHPを選択する。

一般タブの「PHP 5インタプリタ」の欄に「C:\xampp\php\php.exe」と入力する。

PHP 5インタプリタの設定

「OK」ボタンを押して設定を登録する。

以上で、NetBeansでPHPアプリケーションを開発する準備ができました。