代码之家  ›  专栏  ›  技术社区  ›  Mario Mueller

从PHP获取Apache Linux用户

  •  27
  • Mario Mueller  · 技术社区  · 17 年前

    我在国外的Linux系统上,需要确定运行Apache的用户(PHP也是如此)。

    目的: 我需要得到脚本的所有者(这没问题,因为我可以使用splfileinfo)并将其与Apache进程的所有者进行比较。

    我愿意接受任何其他的建议。

    当做, 马里奥

    编辑: 其他信息:

    该脚本是一个缩略图生成器,使用XML文件从较大的图像生成缩略图。脚本需要创建文件夹并写入文件。因为我不能影响PHP配置,也没有任何shell访问权限,所以必须非常安静地进行。 创建过程通过异常停止,并在失败时发送邮件。由于大多数PHP函数不能在failue上抛出异常,所以我需要一些手动检查来确定我所处的环境。因此,我需要Apache用户将其与某个目录或文件所有者进行比较。

    5 回复  |  直到 7 年前
        1
  •  53
  •   grantc    14 年前

    你可以调用php exec 要执行的函数 呼玛 :

    <?php echo exec('whoami'); ?>
    
        2
  •  8
  •   Anonymous    17 年前

    请参见posix getuid()和posix getpwid()。

        3
  •  5
  •   Jamie Carl    13 年前

    这里有一些复杂的答案。

    这对我很有用:

    $user = getenv('APACHE_RUN_USER');
    

    不确定这是否只是一个新的东西被添加到了Apache,因为这个问题被问到,但它现在肯定在那里。

        4
  •  1
  •   zombat    17 年前

    phpinfo 会转储很多系统信息。对于Apache2安装,有一个部分显示Apache用户和组ID。尝试创建一个只有一行的PHP脚本,调用phpinfo(),然后在Web浏览器中打开它。

        5
  •  0
  •   atmacola    7 年前

    一些PHP脚本 必须 在apache用户(cli)上运行,whoami在这种情况下不合适。 这是我的解决方案:

    $output = exec('apachectl -S 2>/dev/null | grep User');
    $apacheUser = preg_match('/name="([^"]+)"/', $output, $match) ? $match[1] : 'www-data';
    
    推荐文章