web-dev-qa-db-ja.com

PHPファイルでexecを呼び出してパラメータを渡しますか?

exec を使用してphpファイルを呼び出したいのですが。

それを呼び出すとき、(id)を介して変数を渡すことができるようにしたいと思います。

私はecho exec("php /var/www/unity/src/emailer.php");を正常に呼び出すことができますが、echo exec("php /var/www/unity/src/emailer.php?id=123");のようなものを追加すると、exec呼び出しが失敗します。

これどうやってするの?

18
Hailwood

コマンドライン呼び出しでWebスタイルの構文(?parameter=value)を使用しているため、呼び出しは失敗しました。あなたの考えを理解していますが、うまくいきません。

代わりに$argvを使用してください。 the PHP manual を参照してください。

この動作を確認するには、次の1行をファイルに書き込みます。

<?php print_r($argv); ?>

次に、コマンドラインから引数を指定して呼び出します。

php -f /path/to/the/file.php firstparam secondparam

$argvには、スクリプト自体の名前が要素0として含まれ、その後に他のパラメーターを渡したことがわかります。

28

スクリプトでecho exec("php /var/www/unity/src/emailer.php 123");を試し、次に コマンドラインパラメータ を読み取ります。

2
hakre

この適応スクリプトは、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

2
tony gil

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);を追加することで上記の例を実行できます。)

1
mario