如何使用php创建host.config文件
我需要在Ubuntu 16.04上设置多个虚拟主机,可以手动创建 但我想用php动态地实现这一点。为此,我尝试使用php的fopen函数在/tmp或/www目录中创建一个文件。因此,我可以创建一个文件,但无法使用php如何使用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
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,但当然您也需要找到一种方法来提供密码。这一页上的答案对你有帮助吗?