【问题标题】:How to create host .config file using php如何使用 php 创建主机 .config 文件
【发布时间】:2017-05-20 03:24:04
【问题描述】:

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

但我想动态地使用 php 执行此操作。为此,我尝试使用 php 的 fopen 函数在 /tmp 或 /www 目录中创建文件。所以我可以创建文件但无法将此文件移动到 /etc /apache2/sites-available 目录使用 php shell_exec() 函数。

要移动临时创建的文件,我使用了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);
?>

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

【问题讨论】:

    标签: php virtualhost shell-exec


    【解决方案1】:

    你在 mv 命令之后没有空格,我不确定 $myfile 在 fclose($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 上编写它,所以让我知道这是否有效。

    【讨论】:

    • 是的,它在实时代码中是可变的。只是在这里我做了硬编码
    • 顺便说一句,除了命令不正确之外,您可能还有权限问题
    • cmd 在 live 上不是问题。我在 live 代码中也有空间
    • 你的代码和我的一样。当 /etc/apache2/sites-available 有 777 权限时工作,但我不能保持 777 在线。所以我想要一种方法将 755 更改为 777 只是为了这个文件创建时刻,然后通过 php 再次将其变为 777
    • 很可能是权限问题。该脚本是从不同的用户运行的。您需要使用 sudo,但当然您也需要找到一种方法来提供密码。此页面上的答案对您有帮助吗? stackoverflow.com/questions/3173201/sudo-in-php-exec
    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多