PHP:スクリプト実行時のタイムアウト時間を変更「max_execution_time」

PHPで大量のデータを処理する時にタイムアウト強制終了)してしまうことがあります。

タイムアウトする時間を設定する場合は、php.inimax_execution_timeの値を変更します。

システムの処理内容によっては、重い処理を行わなければいけないことがあります。
その場合は、max_execution_timeを調整しタイムアウト時間を変更すればエラーを回避することができます。

下記にphp.inimax_execution_timeの値を変更し、スクリプトタイムアウト時間実行時間)を変更した時の方法をメモします。


php.iniのタイムアウト時間を変更

SSHでサーバにログインします。

ログイン後、php.iniを編集します。

vi /etc/php.ini

max_execution_timeの値は秒単位で指定します。

max_execution_time = 30

↓変更

max_execution_time = 120

Apacheを再起動すれば反映されます。

/etc/init.d/httpd restart

■ タイムアウトの時間を無制限にする場合

タイムアウトの制限をかけずに無制限に設定する場合は
max_execution_timeの値を「0」に設定します。

max_execution_time = 0

上記の方法でスクリプトのタイムアウトする時間を調整することができます。

しかし、max_execution_timeはサーバの負荷を防止する為にあるので、
無制限に設定したり、大き過ぎる値を設定するなどは避けた方がいいと思います。

プログラムでバグがあった場合、長時間処理を実行して強制終了せずに
スクリプトが動いてしまうという可能性があるからです。

PHP:php.iniのメモリ「memory_limit」の値を変更

PHPで開発している時にメモリmemory_limit)の上限を変更したい場合があります。

memory_limitの値が低い場合、処理内容によっては「Fatal error」になってしまうことがあります。
その場合、php.iniで設定しているmemory_limitの値を大きくすればエラーを回避することが可能です。

下記にphp.inimemory_limitの値を変更し、メモリの上限を増加させた時の方法をメモします。


php.iniのメモリ上限を変更

SSHでサーバにログインします。

ログイン後、php.iniを編集します。

vi /etc/php.ini

「memory_limit」で検索すると値が設定されています。
設定されている値を変更し、保存します。

memory_limit = 128M

↓メモリ上限を変更

;memory_limit = 128M
memory_limit = 256M

Apacheを再起動すれば反映されます。

/etc/init.d/httpd restart

メモリの上限を無制限にする場合

メモリの制限をかけずに無制限に設定する場合は
memory_limitの値を「-1」に設定します。

memory_limit = -1

PHP:foreachのループを抜ける方法、又はスキップ

phpforeachを使用してループ処理をしている際に、条件によってループを抜けたり中断)、
スキップさせたい場合があります。

その場合は、breakcontinueを使用すれば、処理を中断させたりスキップさせることができます。

他にもfor、while、do-while、switchでも使用可能です。


ループ処理を抜ける(中断)「break」

breakを使用すれば、ループ処理を途中で終了させることができます。

foreach ($arr as $key => $value) {

    if (0 == strcmp($value, 'ccc'))    {
        break;
    }

    echo $value . '<br>';

}

出力結果

aaa
bbb

条件が一致した時に、ループを抜けます。


ループ処理をスキップ「continue」

continueを使用すれば、ループ処理をスキップさせることができます。

$arr = array('aaa', 'bbb', 'ccc', 'ddd', 'eee');


foreach ($arr as $key => $value) {

    if (0 == strcmp($value, 'ccc'))    {
        continue;
    }

    echo $value . '<br>';

}

出力結果

aaa
bbb
ddd
eee

条件が一致した時に、ループをスキップさせます。


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


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

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