0

特定の Unix アカウント (スクリプトが存在するのと同じ Unix サーバー) に関する情報をユーザーに提供するスクリプトを作成する必要があります。ほとんどの場合、passwd ファイルに含まれているか、finger 経由で利用できるものです。

PHP はセーフモードであるため、php に組み込まれているものから passwd ファイルにアクセスすることはできませんfile_get_contents()。また、セーフ モードであるため、他のさまざまなコマンド ライン機能が無効になっています。

ソケットを介して情報を取得できると思っていましたが(それが何を意味するのかまだわかりませんが、試してみると思いました)socket_create()、不明な機能である致命的なエラーが発生します。php-config ファイル (参考までに変更できません) を取得しましたが、ソケットが有効になっていません。

ただし、そこにいる間、'--with-exec-dir='実際のディレクトリが設定されていない行を見ました。

それで、すべてのコマンドライン機能を試していたときに、「セーフモードでは許可されていません」タイプのエラーを投げた人もいれば、何もしなかった人もいることを思い出しました。私が次のようなものを置くと:

echo "[[";
exec("finger user");
echo "]]";

私はで終わるでしょう[[]]。したがって、エラーはなく、結果もありません。

結論:

私が試したことのないものはありますか?(一般に) 動作させるために設定できるランタイム構成オプションはありますexec()か?

簡単なメモ:私も試しpassthru()てみましたが、具体的passthru("pwd")にはまだ出力がありません。

アップデート

フィードバックに基づいて、次の両方を試しました。

$stuff = exec("pwd", $return);

echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);

その結果:

stuff=
return=Array
(
)

$stuff = passthru("pwd", $return);

echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);

その結果:

stuff=
return=1

1 は有望に聞こえますが、まだ私が望んでいるものではありません。

考え

したがって、これは実際には、私がアクセスできない既存のスクリプトの更新です (聞かないでください)。これは、cgi 経由で呼び出される perl スクリプトです。cgi 経由で php を実行する方法はありますか (したがって、perl を処理したり、古いコードに依存したりする必要はありません)。

4

4 に答える 4

1

残念ながら、セーフモードではそれができません。サーバー構成を制御できる場合は、セーフモードを削除する必要があります。

ローカルファイルを読み取るためにソケットに頼ることはできないと思います。ソケットはネットワーク関連のものに使用されます。

于 2009-09-30T15:57:50.027 に答える
0

回答してくれたすべての人のおかげで、最終的に機能したのは次のとおりです。

  • cgi-bin フォルダーを作成する
  • 以下を php スクリプトの先頭に追加します。

     #!/usr/local/bin/php-cgi
    

これが私のサーバー構成で特別なものであるかどうかはわかりませんが、実行exec()して目的のものを取得できます。

于 2009-10-06T01:28:08.267 に答える
0

exec は本質的にデータを返しません。

次のようなものを試してください、

exec("finger user",$output);

echo "[[";
foreach($output as $key => $value){
echo $value;
}
echo "]]";
于 2009-09-30T15:59:50.480 に答える
0

Exec は値を返すので、次のようにします。

$var = exec("finger user"); 

次に、出力を解析して必要なものを取得します。次のようにオプションの変数を追加することで、戻りステータスを取得できます。

exec("finger user", $var, $return_status);

あるいは単に:

echo exec("finger user");

あなたが望むのは出力を見ることだけです。

于 2009-09-30T15:57:36.033 に答える