如何使用php创建host.config文件

如何使用php创建host.config文件,php,virtualhost,shell-exec,Php,Virtualhost,Shell Exec,我需要在Ubuntu 16.04上设置多个虚拟主机,可以手动创建 但我想用php动态地实现这一点。为此,我尝试使用php的fopen函数在/tmp或/www目录中创建一个文件。因此,我可以创建一个文件,但无法使用phpshell_exec()函数将此文件移动到/etc/apache2/sites可用目录 要移动临时创建的文件,我使用了shell\u exec(mv temp\u file path\u To\u move) 但命令不是通过php代码运行的。然后我尝试直接在/etc/apache2

我需要在Ubuntu 16.04上设置多个虚拟主机,可以手动创建

但我想用php动态地实现这一点。为此,我尝试使用php的fopen函数在/tmp或/www目录中创建一个文件。因此,我可以创建一个文件,但无法使用php
shell_exec()
函数将此文件移动到/etc/apache2/sites可用目录

要移动临时创建的文件,我使用了
shell\u exec(mv temp\u file path\u To\u move)

但命令不是通过php代码运行的。然后我尝试直接在
/etc/apache2/sites available
中创建文件,但它显示错误
无法打开文件

这是我使用的代码

<?php
    $myfile = fopen("example.com.conf", "w");
    $template ='<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>';

    fwrite($myfile, $template );
    fclose($myfile);

    $cmd= 'mv'.$myfile.' /etc/apache2/sites-available';
    shell_exec($cmd);
?>


它创建文件但移动命令不起作用

mv命令后没有空格,我不确定fclose($myfile)后$myfile的值是多少,但它肯定不是文件名

对于您当前的代码,这应该可以工作:

$cmd = 'mv example.com.conf /etc/apache2/sites-available';
但是,您将文件名硬编码在两个位置。将其设置为变量会更好:

<?php
$filename = 'example.com.conf';
$myfile   = fopen($filename, "w");
$template = '<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>';

fwrite($myfile, $template );
fclose($myfile);

$cmd = 'mv ' . $filename . ' /etc/apache2/sites-available';
shell_exec($cmd);
?>


我还没有测试过这个,现在正在Windows PC上编写,所以请让我知道它是否有效

是的,它在live代码中是可变的。就在这里,我使用了hardcodedbtw,除了命令不正确之外,您可能还有一个权限问题。live代码中也有空间。您的代码与我的代码相同。当/etc/apache2/站点可用时,此工作具有777权限,但我无法保持777处于live状态。因此,我希望有一种方法将755更改为777,仅用于创建此文件,然后通过PHP再次将其更改为777,这很可能是权限问题。脚本正在从其他用户运行。您需要使用sudo,但当然您也需要找到一种方法来提供密码。这一页上的答案对你有帮助吗?