crontabルールを作成しました:
* * * * * php /my/directory/file.php
このcrontabからfile.phpで使用する変数を渡したい。
これを行うための最良の方法は何ですか?
シェルからPHPを実行することは、Webサーバー環境で実行することとはまったく異なることに注意してください。これまでにコマンドラインプログラミングを行ったことがない場合は、いくつかの驚きに遭遇する可能性があります。
とはいえ、コマンドに情報を渡す通常の方法は、コマンドラインに情報を配置することです。これを行う場合:
php /my/directory/file.php "some value" "some other value"
次に、スクリプト内で、$argv[1]
に設定され"some value"
、$argv[2]
に設定され"some other value"
ます。($argv[0]
に設定されます"/my/directory/file.php"
)。
コマンドラインからPHPスクリプトを実行する$argc
と、配列の変数countfromと実際の値にアクセスできます$argv
。簡単な例。
test.phpを検討してください
<?php
printf("%d arguments given:\n", $argc);
print_r($argv);
を使用してこれを実行するphp test.php a b c
:
4 arguments given:
Array
(
[0] => test.php
[1] => a
[2] => b
[3] => c
)
$argv
より洗練されたコマンドラインパラメータの処理には、httpgetopt()
: //www.php.net/manual/en/function.getopt.phpを使用することをお勧めします。
上記の方法はどちらもうまくいきませんでした。ホスティング事業者の共有サーバーでcronを実行しています。cronタスクは、cPanelのようなインターフェイスで作成されます。コマンドラインはPHPを呼び出し、スクリプト名といくつかの引数を渡します。
cronのコマンドラインは次のようになります。
php7.2 /server/path/to/my/script/my-script.php "test.tst" "folder=0"
上記の答えはどちらも$argv
私の場合はうまくいきませんでした。
$argv
この問題は、CLI引数にアクセスする前にグローバルとして宣言する必要があるとは誰も言わなかった。これは、公式のPHPマニュアルにも記載されていません。
まあ、おそらく$argv
サーバーで実行されるスクリプトのグローバルオニを宣言する必要があります。たぶん、CLIでスクリプトを実行しているローカル環境では、$argv
グローバルとして宣言する必要はありません。私がそれをテストするとき、私はここに投稿します。
しかし、それでも私の場合、動作する構成は次のとおりです。
global $argv;
echo "argv0: $argv[0]\n\r"; // echoes: argv0: /server/path/to/my/script/my-script.php
echo "argv1: $argv[1]\n\r"; // echoes: argv1: test.tst
echo "argv2: $argv[2]\n\r"; // echoes: argv2: folder=0
$_SERVER['argv']
スーパーグローバル配列でも同じ結果が得られました。次のように利用できます。
$myargv = $_SERVER['argv'];
echo $myargv[1]; // echoes: test.tst
それが誰かを助けることを願っています。