exec を使用してphpファイルを呼び出したいのですが。
それを呼び出すとき、(id)を介して変数を渡すことができるようにしたいと思います。
私はecho exec("php /var/www/unity/src/emailer.php");
を正常に呼び出すことができますが、echo exec("php /var/www/unity/src/emailer.php?id=123");
のようなものを追加すると、exec呼び出しが失敗します。
これどうやってするの?
コマンドライン呼び出しでWebスタイルの構文(?parameter=value
)を使用しているため、呼び出しは失敗しました。あなたの考えを理解していますが、うまくいきません。
代わりに$argv
を使用してください。 the PHP manual を参照してください。
この動作を確認するには、次の1行をファイルに書き込みます。
<?php print_r($argv); ?>
次に、コマンドラインから引数を指定して呼び出します。
php -f /path/to/the/file.php firstparam secondparam
$argv
には、スクリプト自体の名前が要素0として含まれ、その後に他のパラメーターを渡したことがわかります。
スクリプトでecho exec("php /var/www/unity/src/emailer.php 123");
を試し、次に コマンドラインパラメータ を読み取ります。
この適応スクリプトは、php execコマンドからphpスクリプトにパラメーターを渡す2つの方法を示しています。CALLINGSCRIPT
<?php
$fileName = '/var/www/ztest/helloworld.php 12';
$options = 'target=13';
exec ("/usr/bin/php -f {$fileName} {$options} > /var/www/ztest/log01.txt 2>&1 &");
echo "ended the calling script";
?>
呼び出されたスクリプト
<?php
echo "argv params: ";
print_r($argv);
if ($argv[1]) {echo "got the size right, wilbur! argv element 1: ".$argv[1];}
?>
実行権限を確認し、書き込み権限を持つlog01.txtファイルを作成することを忘れないでください(通常、Apacheユーザーはwww-dataになります)。
結果
argv params:配列
(
[0] => /var/www/ztest/helloworld.php
[1] => 12
[2] => target=13
)
サイズが正しくなりました、wilburargv要素1:12
パラメータを渡すための任意のソリューションを選択します。必要なことは、argv配列にアクセスして、渡された順序でそれらを取得することです(ファイル名は0要素です)。
tks @hakre
GETパラメータを渡したい場合は、呼び出しにphp-cgiバイナリを指定する必要があります。
_exec("QUERY_STRING=id=123 php-cgi /var/www/emailer.php");
_
しかし、これにはさらに偽のCGI環境変数が必要になる場合があります。そのため、呼び出されたスクリプトを書き直して、通常のコマンドライン引数を取得し、_$_SERVER["argv"]
_を介してそれらを読み取ることをお勧めします。
(同様に、通常のphpインタープリターを使用してphp-cgiの動作を偽装し、スクリプトの上にparse_str($_SERVER["QUERY_STRING"], $_GET);
を追加することで上記の例を実行できます。)