Android(Android 2.3.3およびAndroid 4.0.4。両方にエラーが存在します。)用のPHP(多くのバージョンを試しています。現在は5.3.8で動作しています)をクロスコンパイルしようとしています。ほとんどすべてが正常に機能しています。私にとって最も重要な機能は、いくつかのシェル コマンドを実行することですが、機能しません。たとえば、このコード
<?php
$s = shell_exec("ps");
echo $s;
?>
開始されたすべてのプロセスを出力する必要がありますが、実際には空白の画面が表示されます。system()、pathru() などの関数を使って多くのバリアントを試しています。すべて無駄に。php.ini で disable_functions が空で、セーフモードがオフになっています。
インターネットで Android OS 関連の popen() 関数にエラーがあることを発見しました。しかし、どうすればこの問題を解決できますか?! 私もこれを見つけました:すべてのexec関連のPHP関数segfault
これは私の場合と似ています。しかし、何らかの理由で、著者はエラーをどのように修正したかを書いていません。
更新:何が間違っているかはわかっていると思います。このリンクが役に立ちました: https://bugs.php.net/bug.php?id=60081。PHP は実行コマンド「/bin/sh」に使用しますが、Android には「/bin/sh」はありません。「sh」は「/system/bin/sh」にあります。"/system/bin/sh" -> "/bin/sh" をコピーしようとすると、すべて正常に動作します。しかし、ここで新たな疑問が生じます。「sh」がどこにあるかをPHPに伝える方法は?