我需要在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);
?>
它创建文件但移动命令不起作用
答案 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上编写,所以请告诉我这是否有效。