Como posso executar o sed para substituir linhas em um arquivo ou fazer coisas semelhantes no PHP?

1

Estou escrevendo uma interface web para configurar o OpenWRT. Eu estou usando PHP para executar comandos e todos os comandos uci estão executando sem problemas. No entanto, as configurações do OpenVPN não podem ser feitas via UCI e eu tenho que usar comandos diretos do Unix em seu arquivo de configuração.

Estes comandos funcionam bem no meu terminal, mas não no 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'");

Como posso obter as tarefas acima feitas em PHP? Preciso escrever um script de shell ou preciso alterar as permissões do uhttpd?

Estou executando o php no topo do servidor web do uhttpd no Openwrt Chaos. com framboesa pi2

    
por gripen fighter 25.10.2015 / 21:09

1 resposta

1

Adivinhação rápida e grosseira:

  • Permissão negada. Os arquivos em /etc geralmente não podem ser alterados por usuários comuns, especialmente usuários da Web, como o seu httpd. Execute chmod -R +w /etc/openvpn para abrir um buraco para isso, ou faça alguma coisa chown .
  • sed comando inválido. Nos comandos de número 2-4, várias barras apareceram. Como s é seguido por uma barra, barras são usadas como separador de operandos e sed não funcionará com tantos operandos inválidos. Mude sua coisa sed para isso:

    <?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"); ?>
    
por 25.10.2015 / 23:23