10月 15
PHPをcron(コマンドライン)で実行
やり方は2パターンあります。
1]phpスクリプトの行頭にphpプログラムのファイルパスを記述する
#!/usr/bin/php -q
(-q :: Quiet-mode. Suppress HTTP Header output.)
2]phpプログラムにphpスクリプトを引数として渡して実行する
usr/bin/php test.php
PATHが通っていれば
php test.php
ここでは私がいつも行うやり方を備忘録として…
準備
/usr/local/bin/phpだとパスが長いのでちょっとでも短くしたいので
/usr/bin/phpにシンボリックリンクします
まずはリンク先にphpがあるかどうかの確認
</p> <p style="padding-left: 30px;">su - cd /usr/bin find php find: php: そのようなファイルやディレクトリはありません <p style="padding-left: 30px;">
※もし既に/usr/bin/phpが存在する場合はrpmなどで
インストール済みの物なのでリネームor削除する
ソースコンパイルでインストールしたPHPで
シンボリックリンクを張る
su - ln -s /usr/local/bin/php /usr/bin/php
テスト用のtest.phpを作成
#!/usr/bin/php -q <?php echo "Hello Test"; ?>
実行権限を付与
chmod 700 test.php
#実行してみる
./test.php
→”Hello Test” と表示されればOK!
これをスケジューリングしたい場合には
Cronに登録
(例: 毎日8:00に起動)
crontab -e 00 08 * * * /home/sv01/bash/test.php
引数の受け渡し
PHPをコマンドラインで実行すると、コマンドラインで与えた引数の情報が
$argc、$argvという変数に格納されます。
$argc : 引数の数
$argv : 引数が格納された配列
普通、最低でも引数としてファイル名が指定されているので、
$argc : 1
$argv[0] : ファイル名(パス)
となるはずです。
例えば、
(test.php)
#!/usr/bin/php -q
<?php
for ($i = 0; $i < $argc; $i++) {
echo $i, " : ", $argv[$i], "\n";
}
?>