当前位置: 首页 > 知识库问答 >
问题:

如何阻止mkdir()文件将“daemon”设置为admin

易成双
2023-03-14

我使用mkdir()在代码中创建新文件,但由于某种原因,它设置了一个名为“daemon”的东西作为admin。我不能删除这些文件,编辑,访问,甚至移动这些文件。如何在代码中创建文件时改变这种情况?

<?php
 $dir = 'myDir3';

 // owner will be the user/group the PHP script is run under
 if ( !file_exists($dir) ) {
     mkdir ($dir, 0777);
 }

 file_put_contents ($dir.'/test.txt', 'Hello File');


$file = 'template.php';

if(file_exists($file)){

    echo readfile($file);


    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    ini_set("display_errors", 1);

    copy($file, $dir.'/fake.php');



    

} else {

    echo 'file does not exist';

}





?>

共有1个答案

屠嘉勋
2023-03-14

好的,再次感谢@blueweimer,澄清了您在MacOS上使用的是XAMPP(而不是XAMPP-vm);因为多亏了那个澄清,我才找到了你问题的正确答案,可以在这里找到。

详细说明一下链接中找到的答案:默认情况下,当在MacOS中的XAMPP中创建任何类型的文件夹或文件时,它使用httpd.conf文件中找到的用户和组(d代表“daemon”,这是对Unix系统中运行的进程的命名(如Linux和Mac,Mac与Unix有较大区别,但仍保留了一些相同的术语))。因此,通过更改在该文件中找到的用户和组,您可以更改保持服务器运行的用户。Apache使用这个用户访问XAMPP中的所有内容。

需要注意的是,在httpd.conf中更改文件时,您正在更改访问用户;但这不会自动更改已经创建的文件和文件夹的所有者。根据上面的链接,这些文件位于/applications/xampp/xamppfiles/中,您必须将文件的所有者和文件夹本身更改为您在httpd.conf中将其更改为的新用户。

不要将此用户更改为您自己的用户,因为XAMPP上发生的任何安全故障都将允许任何可以访问您的XAMPP服务器的人远程访问您的用户。

首先,如果可能,请张贴一个代码片段,以便我们可以知道这是如何被访问的。

其次,我要为将所有这些都放在一个答案中表示歉意(信誉很低,所以我现在还不能发表评论),但是从php的mkdir手册页面来看,它似乎是以运行它的用户为所有者创建目录的。鉴于它将所有者设置为“daemon”,而您无法访问它,我认为可以安全地假设您没有建立默认权限(0777),而是将该文件作为守护进程运行。

您可以选择更改创建文件夹的权限:

php prettyprint-override"><?php
mkdir("/path/to/my/dir", 0777);
?>

或者,您可以使用chown命令将所有权从“daemon”更改为您创建文件夹的同一php文件中的另一个用户:

<?php
mkdir("/path/to/my/dir", 0700);
chown("/path/to/my/dir", "username");
?>

这个答案是根据所提供的信息给出的:您没有指定使用的Web服务器(您只是指定了html),也没有指定OS,所以我的理解是它是Linux发行版(否则,文件夹访问不是PHP的问题,而是Web服务器的权限问题)。

 类似资料:
  • 问题内容: 我没有找到关于如何注册一个将接口实现为Windows服务的类的非常好的示例(实际上我没有找到一个示例)。 我是否必须使用procrun注册该实现?但是实现该接口似乎没有意义,因为procrun可以将任何程序注册为Windows服务。 此外,procrun页面(http://commons.apache.org/proper/commons- daemon/procrun.html )上

  • 问题内容: 我想将配置文件名称设置为整个程序包,但我不知道如何。如果在哪里不是简单的方法,那么我必须用注释标记包和子包中的每个类。 标签不支持这样的属性,所以我不知道。 问题答案: 您可以将个人资料设置为: 文件-用于xml配置 Java配置类 在它们的每一个中,您都可以对特定的软件包使用组件扫描。

  • 问题内容: 我想在this的文本框中设置默认文件名。我可以设置吗? 问题答案: 使用以下代码: 您必须指定完整路径

  • 我有一些具有两列的TableView-名称和大小;此表适用于File对象; PropertyValueFactory可以为列获取对象的属性,尝试搜索somenameProrperty、getSomename、isSomename;我需要从文件中获取length()方法。 此代码查看文件名(getName()方法),但长度列为空。知道我可以用factory从文件中获取length()吗?

  • 快速笔记。这是我的高级NEA编程项目。有两个主要部分——一个是生成迷宫,用户必须在给定的时间段内通过它,该时间段当前没有实现,第二个部分是用户必须回答教育物理问题以获得最佳分数。问题从本地存储在我的系统上的文本文件中导入。然后,用户的分数和完成日期一起导出到本地文本文件中。 到目前为止,我的程序生成迷宫,用户可以自由移动。教育方面按预期工作。 我该从哪里开始,让墙壁充当物理屏障,而不仅仅是视觉屏障

  • 我使用的Apache Web服务器的所有者设置为。我从来不知道什么是文件权限的最佳实践,例如当我创建新的Laravel5项目时。 Laravel 5要求文件夹是可写的。我发现了许多不同的方法来使其工作,我通常以递归地使其chmod结束。我知道这不是最好的主意。 官方文件说: Laravel可能需要配置某些权限:和中的文件夹需要web服务器的写访问权限。 这是否意味着web服务器也需要访问和文件夹本