2011-07-27 8 views
0

は、PHPファイルを呼び出していない場合は含まれていたとき、この関数は引数を失っている:(ブラウザでURLを開くと、CGIを通してそれをやったときにphp myScript.phpすべてが正常に動作しますが、php system(); CGIを介して実行が、CLIから

CLIから
<?php system('/bin/sh /usr/local/bin/myScript.sh '.'myArg'); ?> 

て背景のApache)文字列が失われます。 何が失敗する可能性があるのか​​誰も知っていますか?

PD:myScript.shはそうテール/tmp/foo.txtすべてがCLIからではなく、ApacheのCGIから正常に動作を示すだけで

echo "$# $*" >> /tmp/foo.txt 

です。 php.iniに余分な設定が必要ですか?私は私のapacheエイリアスファイルに何か特別なものが必要ですか?それはブードーですか?

答えて

1

あなたのコードが上記のとおりであれば、'myArg'は失われません。ただし、引数を動的に設定する場合は、呼び出し元のメソッドに対して適切に動作するように引数を収集する必要があります。

ブラウザでスクリプトを実行すると、$_REQUEST$_GET、または$_POSTで引数を収集できます。 CLIを使用してスクリプトを実行すると、引数はにあります。

引数の値が正しいことを確認したら、次にアクセス許可を確認します。 CLIユーザーに、指定された引数を指定してコマンドを実行する権限があることを確認します。

+0

答えのためのThx、今、myArgは文字列なので、cliとcgiの両方で動作するはずですね。 – user846226

+0

@ user846226:最新の回答をご覧ください。 –

+0

Thx答えがたくさんありますが、メインの投稿に記載されているように、myScript.phpとmyScript.shの両方が問題なく実行されます。 myArgvはphp 'string'ですが、私はすでにcli/cgiから引数を取得する方法を知っています。それはコーディングの問題ではない、私は何かのPHPのCGIの設定やOSの内部に関連する何かに関連するかもしれないことです。マッチするだけでphp myScript.phpはうまくいきますが、uriを使って実行すると引数はまったく同じになります。 – user846226

1

apacheを実行するユーザーのシェルのシェルが/etc/passwdであることを確認してください。デフォルトユーザーはnobodyです。

+0

こんにちは、答えに感謝します。 Apacheを実行するユーザーはwww-dataです。 myScript.phpはubuntuユーザが所有していますcat/etc/passwd | grep -i www www-data:x:33:33:www-data:/ var/www:/ bin/sh – user846226

+0

@ user846226あなたのCGIファイルwasn実行されません。ファイルのファイル権限を確認してください。 (とにかくそれは403エラーにつながる可能性があります...) – Zaffy

+0

こんにちは、どのcgiファイルについて話していますか? :) – user846226

関連する問題