PHPでファイルや同様の行を置き換えるには、sedをどのように実行しますか?

PHPでファイルや同様の行を置き換えるには、sedをどのように実行しますか?

OpenWRT構成用のWebフロントエンドを作成しています。私はPHPを使用してコマンドを実行しており、すべてのuciコマンドが正しく実行されています。ただし、OpenVPN構成はUCIを介して行うことはできず、構成ファイルに直接Unixコマンドを使用する必要があります。

このコマンドは私の端末ではうまく機能しますが、PHPでは機能しません。

shell_exec(" cd /etc/openvpn && sed -i '2s/.*/remote 5-nl.cg-dialup.net 443/' openvpn.ovpn && cd'");
shell_exec(" cd /etc/openvpn && sed -i '30s/.*/ca /etc/openvpn/Nethelands/ca.crt/' openvpn.ovpn && cd'");
shell_exec(" cd /etc/openvpn && sed -i '32s/.*/cert /etc/openvpn/Nethelands/client.crt/' openvpn.ovpn && cd'");
shell_exec(" cd /etc/openvpn && sed -i '34s/.*/key /etc/openvpn/Nethelands/client.key/' openvpn.ovpn && cd'");

PHPを使用して上記のタスクを実行するには?シェルスクリプトを作成する必要がありますか、またはuhttpd権限を変更する必要がありますか?

私はOpenwrt Chaos chill uhttpd WebサーバーでPHPを実行しています。ラズベリーパイ2

答え1

おおよその推測:

  • 許可が拒否されました。/etc一般ユーザーは通常ファイルを変更できません。特にhttpdのようなWebユーザーはさらにそうです。そのために走ってchmod -R +w /etc/openvpn穴を開けたり、何かをしてくださいchown
  • sedコマンドが無効です。コマンド 2-4 には複数のスラッシュが表示されます。sスラッシュは後に続くので、スラッシュはオペランドの区切り文字として機能し、あまりにもsed多くの無効なオペランドとは機能しません。 sedコンテンツを次に変更してください。

    <?php /* For Syntax */ // cd avoided.
    shell_exec("sed -i.php_sed_bak ".
        "-e '2s@.*@remote 5-nl.cg-dialup.net 443@' ".
        "-e '30s@.*@ca /etc/openvpn/Nethelands/ca.crt@' ".
        "-e '32s@.*@cert /etc/openvpn/Nethelands/client.crt@' ".
        "-e '34s@.*@key /etc/openvpn/Nethelands/client.key@' ".
        "/etc/openvpn/openvpn.ovpn"); ?>
    

関連情報