8

crontabルールを作成しました:

* * * * * php /my/directory/file.php

このcrontabからfile.phpで使用する変数を渡したい。

これを行うための最良の方法は何ですか?

4

4 に答える 4

11

シェルから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")。

于 2012-04-22T00:49:28.097 に答える
7

コマンドラインから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
)
于 2012-04-22T00:49:32.557 に答える
1

$argvより洗練されたコマンドラインパラメータの処理には、httpgetopt(): //www.php.net/manual/en/function.getopt.phpを使用することをお勧めします。

于 2012-04-22T00:58:16.500 に答える
0

上記の方法はどちらもうまくいきませんでした。ホスティング事業者の共有サーバーで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

それが誰かを助けることを願っています。

于 2018-02-19T10:20:12.960 に答える