PR

エックスサーバーのcronでPHPを動かす方法&間違いやすい部分まとめ

スポンサーリンク

(2019年3月23日更新)エックスサーバー側の仕様変更に対応

エックスサーバーのcronでPHPを動かす方法を調べたのだけど、本家エックスサーバーの解説ページが分かりにくいので、自分なりに調べて以下にまとめてみた。

 

スポンサーリンク

エックスサーバーでcronを動作させる為の方法

上記解説ページの通りに設定すると、以下のようになる。

Xserverのcron設定画面(間違い版)

 

でも、これでは動作しない。

念のために書くと、上記は 日曜日の12時丁度にtestアカウントのtest.jpのa.phpを実行しようとしたもの。

で、話を戻すと、なぜ動かないのか!?

以下、その原因としてありがちなものを列挙。

 

コマンドが不足している

上図の中のコマンドはそれだけでは動かない。 動作させているPHPのバージョンに応じて以下のコマンドを頭に足す必要がある。(コマンドパス一覧参照)

PHP5.1 = /usr/bin/php5.1
PHP5.2 = /usr/bin/php5.2
PHP5.3 = /usr/bin/php5.3
PHP5.4 = /usr/bin/php5.4
PHP5.5 = /usr/bin/php5.5
PHP7.0 = /usr/bin/php7.0
PHP7.2 = /usr/bin/php7.2

バージョンがよく分からない人は以下から確認&設定

エックスサーバーでPHPのバージョンを確認する

 

具体的には以下のようにする(スペースに注意)。

/home/test/test.jp/public_html/a.php
↓ ↓ ↓
/usr/bin/php7.0 /home/test/test.jp/public_html/a.php

もっと分かりやすくするとこんな感じ(PHPのバージョンが7.0の場合)

/usr/bin/php7.0 /home/アカウントID/ドメイン名/public_html/設置ディレクトリ/実行したいPHPファイル

 

パーミッションが間違っている

実行するPHPファイルのパーミッションを755にする。

 

文字コードの問題

実行するPHPの文字コードをUTF-8にする。
やり方が分からない場合はKanjiTranslatorで「UTF-8(BOM無し)/改行=CR+LF)」で変換すれば良い。

include(インクルード)が相対パス

実行するPHPの中にinclude、include_once、require、require_onceを用いており、しかもファイルパスを相対アドレスで表記している場合、それが原因で動かない事が往々にしてある。(うちのcronは、これが原因で、先日のエックスサーバーのアップデートでいきなり動かなくなった)

具体的には、以下のように相対パスになっているものを、、、

include '/test.php';
require '/../abc/test2.php';

以下のように絶対パスを定数にして、関連するファイルすべてのinclude系に定数を入れる。

define("T_DIR",__DIR__);

include T_DIR.'/test.php';
require T_DIR.'/../abc/test2.php';

なぜそうするかは、パシャログさんの記事がイケてるので、そちらを参照のこと。

 

cronの設定の仕方覚え書き

設定時に、覚えておくべきと便利かなぁって部分を列挙してみる♪

曜日

曜日の数字は以下のように捉えられる。
0=日曜日 1=月曜日 2=火曜品 3=水曜日 4=木曜日 5=金曜日 6=土曜日 7=日曜日

複数の条件を指定

分、時間、日、月、曜日すべてにおいて、複数指定する時は以下のようにカンマで区切る

0,20,40

未指定

指定しない。いつでもいい。すべてが対象。というときはアスタリスクを使う。

こいつ → *

 

最終的なcron設定画面

こんな感じ♪

Xserverのcron設定画面(正しい版)

コメント