如何使用php创建主机.config文件

时间:2017-05-20 03:24:04

标签: php virtualhost shell-exec

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

但是我想动态地用php做这个。为此我试图使用php的fopen函数创建一个文件/ tmp或在/ www目录。所以我可以创建一个文件但是无法移动它使用php shell_exec()函数将文件传送到/ etc / apache2 / sites-available目录。

要移动临时创建的文件,我使用了shell_exec(mv temp_file path_to_move);

但是命令没有通过php代码运行。然后我试图直接在/etc/apache2/sites-available创建文件,但它显示错误Cannot open file

这是我用过的代码

<?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);
?>

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

1 个答案:

答案 0 :(得分:0)

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上编写,所以请告诉我这是否有效。