
レンタルサーバを契約しているけど、日時を指定して自動実行するプログラムがつくれないかなー?
PHPで作ったバッチスクリプトを定期的に実行したいとき、「cron(クーロン)」はとても便利な仕組みです。
この記事では、お名前.comの共用サーバー上でcronを設定してPHPスクリプトを動かす方法を、初心者向けに解説します。
cronってなに?サーバーで定期実行できる仕組み
cronとは
cronは、Linuxサーバー上で定期的に特定のコマンドやスクリプトを自動実行する仕組みです。
- 毎日深夜にバックアップスクリプトを実行
- 毎週月曜にメール送信処理を実行
- 毎日決まった時間にAPIからデータ取得 など
設定しておけば、他の仕事をしている間も寝ている間も自動的にプログラムを実行してくれます。
cronの基本構文(crontab形式)
例:毎日朝5時にPHPスクリプトを実行
分 時 日 月 曜日 コマンド
0 5 * * * /usr/bin/php /home/ユーザー名/public_html/script.php > /home/ユーザー名/log.txt 2>&1
- 0 5 * * *:毎日5:00に
- /usr/bin/php:PHPコマンドのパス ※管理ツールで確認できます
- script.php:実行したいPHPファイル
- > log.txt 2>&1:標準出力とエラー出力をログに保存 ※必要に応じて
使用環境
- サーバー:お名前.com 共用レンタルサーバー
- 言語:PHP(CLI実行)
- データベース:MySQL(PDO使用)
ステップ①:テスト用のPHPスクリプトを作成
まずは cron_test.php というファイルを作って、ちゃんとcronが動作するか確認してみます。
<?php
$date = date("Y-m-d H:i:s");
file_put_contents(__DIR__ . "/cron_test_log.txt", "Cron実行時刻:$date\n", FILE_APPEND);
?>
このスクリプトでは、実行された日時を cron_test_log.txt に追記していきます。
ステップ②:cronジョブを設定する

お名前.comのサーバーコントロールパネルから、cron設定を追加します。

項目 | 入力例 |
---|---|
月 | *(すべて) |
日 | *(すべて) |
曜日 | *(すべて)、1-5(月〜金) |
時間 | 5(午前5時)、*/3(3時間ごと)、*(毎時) |
分 | 30(30分)、*/5(5分ごと)、*(毎分) |
コマンド | /usr/bin/php /home/ユーザー名/public_html/ドメイン名/cron_test.php |
メモ | cronの実行テスト |
- 実行間隔は「5分ごと」「毎時」など、用途に合わせて設定してください。
- /usr/bin/php はCLI用のPHP実行パスです ※管理ツールで確認可能
裏ワザ:CLIかWebかを判別するには
実行環境を見分ける便利な定数「PHP_SAPI」
同じスクリプトでも、Webからのアクセスとcron(CLI)では環境が異なります。
PHPには、現在の実行環境(SAPI=Server API)を示す「PHP_SAPI」という定数が用意されています。
これは、「このPHPスクリプトがWebブラウザから呼ばれたのか?CLI(コマンドライン)から実行されたのか?」を判別するためにとても便利です。
よく使う判定コード
次のように判定することで、処理を分岐できます。
if (PHP_SAPI === 'cli') {
echo "これはCLI(cronやターミナル)で実行されています。";
} else {
echo "これはWebブラウザ経由で実行されています。";
}
判定結果の一例
実行方法 | PHP_SAPIの値 |
---|---|
Webブラウザ経由 | apache2handler や cgi-fcgi |
cronやターミナル経由 | cli |
活用例:cron用とWeb用で処理を分ける
if (PHP_SAPI === 'cli') {
// cron専用の処理(大量データ処理、本番DBなど)
} else {
// Web表示用の処理(ユーザー向けの画面やエラーメッセージ)
}
開発中は、Webで動かしてデバッグ → CLIではcronで本番実行、というケースが多いので、PHP_SAPI を使い分けると安心です。
最後に:ログを保存して動作確認
実行コード内の記述でログ出力できますが、cron設定でも指定することができます。
cronジョブの出力をログファイルに書き出すと、エラーや実行結果を後から確認できます。
ログ付きのコマンド例
/usr/bin/php /home/ユーザー名/public_html/ドメイン名/script.php > /home/ユーザー名/public_html/ドメイン名/cron_output.log 2>&1
- > は標準出力のリダイレクト
- 2>&1 は標準エラー出力もまとめてログに保存する指定です
まとめ
やったこと | 内容 |
---|---|
PHPでテストスクリプト作成 | file_put_contents() でログ出力 |
cronの設定 | /usr/bin/php + 絶対パスで指定 |
DB接続エラーの解消 | localhost → 127.0.0.1 に変更 |
実行環境の判定 | PHP_SAPI === ‘cli’ でCLI判定 |
ログ保存方法 | > log.txt 2>&1 で出力確認 |
おわりに
共用サーバーでも、しっかり設定すればcronでバッチ処理を自動化できます。
PHP×MySQLの初心者でも、ひとつずつステップを踏めば確実に実現できますよ!
コメント