PHP:ファイル・ディレクトリの存在チェック

PHPで指定したファイルディレクトリ(フォルダ)が存在するか確認したい場合があります。

file_exists」や「is_dir」関数を使用すれば、ファイルやディレクトリの存在確認を行うことが可能です。

下記にPHPfile_exists関数、is_dir関数を使用して、ファイルディレクトリ存在チェックを行った時の方法をメモします。


file_exists関数

指定したパスのファイルやディレクトリが存在するかを調べます。
存在すれば「true」を返し、存在しなければ「false」を返します。

file_exists('ファイルパス')

is_dir関数

指定したパスがディレクトリかを調べます。
ディレクトリの場合は「true」を返し、ディレクトリではない場合「false」を返します。

is_dir('ファイルパス')

ファイル・ディレクトリの存在チェック

下記は指定したパスが存在するかチェックし、
存在する場合、ディレクトリかどうかを判定しています。

$path = "./test.txt";

// ファイル・ディレクトリが存在する場合
if (file_exists($path)) {
	// ディレクトリの場合
	if (is_dir($path)) {
		echo 'ディレクトリです。';
	}
	// ディレクトリではない場合
	else {
		echo 'ディレクトリではありません。';
	}
}
// 存在しない場合
else {
	echo '存在しません。';
}

ファイル・ディレクトリパスは絶対パス、相対パスどちらでもOKです。


PHP:phpで簡単なカレンダーを作成する方法

phpで現在の年月のカレンダーを表示するサンプルを作成しました。

WEBサイトを構築しているとカレンダーを表示したい場合があります。
営業日カレンダーイベントカレンダーなど、様々な箇所で利用されています。

ツールやライブラリーなど色々ありますが、それらを使用せずに
phpで簡単なカレンダーを作成した時の方法をメモします。


phpで簡単なカレンダーを作成

※テーブルで出力する場合の方法です。

PHP

「$year」「$month」に取得したいカレンダーの年月を指定します。
「$calendar」にカレンダーの情報を格納します。

<?php

// 現在の年月を取得
$year = date('Y');
$month = date('n');

// 月末日を取得
$last_day = date('j', mktime(0, 0, 0, $month + 1, 0, $year));

$calendar = array();
$j = 0;

// 月末日までループ
for ($i = 1; $i < $last_day + 1; $i++) {

    // 曜日を取得
    $week = date('w', mktime(0, 0, 0, $month, $i, $year));

    // 1日の場合
    if ($i == 1) {

        // 1日目の曜日までをループ
        for ($s = 1; $s <= $week; $s++) {

            // 前半に空文字をセット
            $calendar[$j]['day'] = '';
            $j++;

        }

    }

    // 配列に日付をセット
    $calendar[$j]['day'] = $i;
    $j++;

    // 月末日の場合
    if ($i == $last_day) {

        // 月末日から残りをループ
        for ($e = 1; $e <= 6 - $week; $e++) {

            // 後半に空文字をセット
            $calendar[$j]['day'] = '';
            $j++;

        }

    }

}

?>

HTML

「$calendar」をループさせ、カレンダーの値を出力します。

<?php echo $year; ?>年<?php echo $month; ?>月のカレンダー
<br>
<br>
<table>
    <tr>
        <th>日</th>
        <th>月</th>
        <th>火</th>
        <th>水</th>
        <th>木</th>
        <th>金</th>
        <th>土</th>
    </tr>

    <tr>
    <?php $cnt = 0; ?>
    <?php foreach ($calendar as $key => $value): ?>

        <td>
        <?php $cnt++; ?>
        <?php echo $value['day']; ?>
        </td>

    <?php if ($cnt == 7): ?>
    </tr>
    <tr>
    <?php $cnt = 0; ?>
    <?php endif; ?>

    <?php endforeach; ?>
    </tr>
</table>

CSS

見やすいように、スタイルを調整します。

<style type="text/css">
table {
    width: 100%;
}
table th {
    background: #EEEEEE;
}
table th,
table td {
    border: 1px solid #CCCCCC;
    text-align: center;
    padding: 5px;
}
</style>

下記のようにカレンダーが出力されます。

※下記は2014年7月のカレンダーを出力した場合です。

calendar


オリジナルで作成していた方がカレンダーにイベント情報を入れたり等の
カスタマイズがしやすいのでいいと思います。

また関数にしておくと使いやすいかもしれないです。

PHP:defineで定数の2重定義はエラーになる

phpdefineを使用し、定数定義した時に同じ名前の定数を2重で定義するとエラーになります。

例えば下記のように、処理の中で同じ名前の定数を複数定義します。

define('TEST', 'テスト');

define('TEST', 'test');

echo TEST;

出力結果は1度目に定義した値が出力されます。

テスト

一度定義した定数は再定義することができないのです。

2重定義をすると、下記のようなエラーが返ってきます。

Constant TEST already defined

フレームワークなどを使用している場合、複数のファイルを読み込むことが多いので注意が必要です。
また、requireincludeでファイルをインクルードしている場合も注意した方がいいと思います。

色々な箇所で定数を定義していると、2重定義をする可能性があるかもしれないので
定数を定義するファイルはなるべく一つにまとめた方がいいのかなと思います。

defined()関数を使用すれば、すでに定数が存在するかわかるので、
下記の方法で2重定義を防ぐことが可能です。


2重定義を防ぐ方法

defined()はすでに定数が存在するか調べることができる関数です。
指定した値が定数で定義させている場合は「true」、定義されていない場合は「false」を返します。

なので、定義されていない場合に定数をセットするようにすればOKです。

if (!defined('TEST')) {
	define('TEST', 'テスト');
}

PHP:PHPで明日、昨日、来月、先月などの日付取得

PHP日付取得して処理をすることはよくあります。

現在の日付を取得するのはdate()関数を使用すればいいのですが、
明日」「昨日」「来月」「先月」などの日付を取得する場合は、
strtotime()関数やmktime()関数を使用します。

忘れてしまうことが多いので、下記にメモします。


PHPで日付取得(明日、昨日、来月、先月)

※出力結果は2014年5月9日の場合

今日の場合

date('Y-m-d');

「出力結果」

2014-05-09

明日の場合

// strtotime()を使用した場合
date('Y-m-d', strtotime('+1 day'));

// mktime()を使用した場合
date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') + 1, date('Y')));

「出力結果」

2014-05-10

昨日の場合

// strtotime()を使用した場合
date('Y-m-d', strtotime('-1 day'));

// mktime()を使用した場合
date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') - 1, date('Y')));

「出力結果」

2014-05-08

来月の場合

// strtotime()を使用した場合
//date('Y-m', strtotime('+1 month'));
date('Y-m', strtotime(date('Y-m-1') . '+1 month'));

// mktime()を使用した場合
//date('Y-m', mktime(0, 0, 0, date('n') + 1, date('j'), date('Y')));
date('Y-m', mktime(0, 0, 0, date('n') + 1, 1, date('Y')));

「出力結果」

2014-06

先月の場合

// strtotime()を使用した場合
//date('Y-m', strtotime('-1 month'));
date('Y-m', strtotime(date('Y-m-1') . '-1 month'));

// mktime()を使用した場合
//date('Y-m', mktime(0, 0, 0, date('n') - 1, date('j'), date('Y')));
date('Y-m', mktime(0, 0, 0, date('n') - 1, 1, date('Y')));

「出力結果」

2014-04

※来月と先月の月の取得を訂正しました。


strtotime()関数のフォーマット

下記にstrtotime()関数でよく使用するフォーマットをメモします。
※「+1」の数値は取得したい値に変更できます。

フォーマット 内容
now 現在のタイムスタンプを取得
today 今日のタイムスタンプを取得
tomorrow 明日のタイムスタンプを取得
yesterday 昨日のタイムスタンプを取得
+1 day 1日後のタイムスタンプを取得
+1 week 1週間後のタイムスタンプを取得
+1 month 1ヵ月後のタイムスタンプを取得
+1 year 1年後のタイムスタンプを取得
+1 hour 1時間後のタイムスタンプを取得
+1 minute 1分後のタイムスタンプを取得
+1 second 1秒後のタイムスタンプを取得

上記以外にも色々な使い方があります。
フォーマットは複数組み合わせることも可能です。


PHP:モバイル判別するPHPクラスライブラリ「Mobile Detect」

WEBサイトモバイル判別をしてページを表示することは良くあると思います。
PHPで判別する場合、「Mobile Detect」を使用すれば簡単にスマホタブレットなどの判別をすることが可能です。

mobiledetect

mobiledetect

今までユーザエージェントを取得して判別をしていましたが、
とても簡単に使用できるのでおすすめです。

下記にPHPクラスライブラリMobile Detect」を使用して、
スマホタブレットなどのモバイル判別をした時の使用方法をメモします。


「Mobile Detect」の使用方法

下記URLにアクセスし、「Mobile Detect」をダウンロードします。

http://mobiledetect.net/

Mobile_Detect.php」を設置し読み込みます。

require_once './Mobile_Detect.php';
$detect = new Mobile_Detect;

下記のようにすればそれぞれ判別をすることができます。

モバイル判定

if ($detect->isMobile()) {
	// モバイル
}

タブレット判定

if ($detect->isTablet()) {
	// タブレット
}

PC判定

if ($detect->isMobile() || $detect->isTablet()) {
	// モバイル・タブレット
}
else {
	// PC
}

上記以外にもユーザエージェントごとの細かい判別をすることが可能です。