特定の 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 を処理したり、古いコードに依存したりする必要はありません)。