PHP에서 파일이나 이와 유사한 줄을 바꾸려면 sed를 어떻게 실행합니까?

PHP에서 파일이나 이와 유사한 줄을 바꾸려면 sed를 어떻게 실행합니까?

OpenWRT 구성을 위한 웹 프런트엔드를 작성 중입니다. 저는 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 웹 서버에서 PHP를 실행하고 있습니다. 라즈베리 파이 2

답변1

대략적인 추측:

  • 허가가 거부되었습니다. /etc일반 사용자는 일반적으로 파일을 변경할 수 없습니다. 특히 httpd와 같은 웹 사용자는 더욱 그렇습니다. 이를 위해 달리고 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"); ?>
    

관련 정보