Archive for the ‘PHP’ Category

PHP5.3から新しいエラーレベルが追加されています。

・E_DEPRECATED
・E_USER_DEPRECATED

これらのエラーは推奨されていない関数を使用すると発生します。
詳細は http://php.net/manual/ja/migration53.deprecated.php

PEARなどのライブラリで推奨されない関数が利用されている場合があり、
require_onceなどで読み込んだだけでエラーが表示されてしまいます。

対処方法は、使用している関数を推奨されていないものから変更する。
ライブラリなどの利用していてどうしても関数が変更できない場合はエラーを
表示しないように変更する。

変更方法は大きく二つ。

・php.iniでエラー表示レベルの変更を行う

error_reporting  =  E_ALL
↓
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

 

・非表示にするコードを書く。

if (error_reporting() > 6143) {
    error_reporting(E_ALL & ~E_DEPRECATED);
}

新しいXAMPPを使いたかったので、最新版(1.77)をダウンロード。
PEARのパッケージが足りなかったので「pear install xxxx」を実行したところ、
ダウンロードは正常にいくが、解凍時に「failed to mkdir」と表示される。

原因は、Windows Vista以降のUAC(User Account Control)が原因と思われる。
UACを無効にしていても、コマンドプロンプトでコマンドを実行する際は、
管理者権限が必要となる模様。

対応方法は、管理者権限でコマンドプロンプトを起動し、コマンドを実行する。

■文字エンコーディングのチェック例

<?php

$temp = isset($_GET['id']) ? $_GET['id'] : '';

    if (! mb_check_encoding($id, 'SHIFT_JIS')) {

        die('文字エンコーディングが正しくありません');

}

?>

 

■文字エンコーディングの変換例

<?php

$id = mb_convert_encoding($id, 'UTF-8', 'SHIFT_JIS');

?>

 

・eregはPHP5.3以降で非推奨となっているため、使用しない。(しかもバイナリセーフではない)
・正規表現には、pregまたはmb_eregを使用する。
・PHP5.3.0以降、POSIX正規表現拡張モジュールは非推奨となったため、PCREを使う。(preg_xxx関数)

文字エンコーディングの検査にはmb_check_encoding関数を利用する。

書式:
bool mb_check_encoding( string $var, string $encoding)

$var → チェック対象の文字列
$string → 比較する文字エンコーディング(省略した場合は、PHPの内部文字エンコーディングとなる)

比較して一致したならば、Trueを返し、一致しない場合はFalseを返す。

phpでファイルの更新時刻からの経過時間を表示する例。

<html>
<head>
<title>ファイルの更新時刻からの経過時間を表示する</title>
</head>
<body>
<?php


$fileName = "test.php";
setlocale(LC_TIME, "ja");

if (file_exists($fileName)) {


    $string1 = strtotime(date("Y/m/d H:i:s", filemtime($fileName)));
    echo "<p>最終更新時刻:".date("Y/m/d H:i:s", $string1);


    $string2 = strtotime(date("Y/m/d H:i:s"));
    echo "<p>現在の時刻:".date("Y/m/d H:i:s", $string2);


    $string = ($string2 - $string1) / 60;
    echo "<p>現在の時刻との差は".$string."分です";

} else {

    echo "ファイルが見つかりません";

}

?>

PHPのセキュリティ対策例

・Script Insertion(スクリプト挿入)

————————————————————
$string = htmlspecialchars($post_data, ENT_QUOTES, ‘UTF-8’);
————————————————————

・$post_data はブラウザ等で入力されたデータが格納されている。

・htmlspecialcharsの第二引数は指定しない場合は”(ダブルクォート)でエスケープされる。
ダブルクォートでは変数が展開されるため、ENT_QUOTES ( ‘ ) シングルクォートを指定する。

・第三引数は文字コードなので、環境に応じ変更する。