fopen 创建文件,但是如何更改权限?

Posted

技术标签:

【中文标题】fopen 创建文件,但是如何更改权限?【英文标题】:fopen Creates File, But how to change permissions? 【发布时间】:2012-01-29 10:52:56 【问题描述】:

我正在使用 fopen 创建一个新文件。

$filename = 'user_data/10.xml';
$openhandle = fopen($filename, 'w+');

然后我检查文件是否已使用:file_exists() 函数创建。

问题是:文件是由某个所有者创建的,可能是文件夹名称,但不是我。文件的权限也只有readable by the owner。 而且由于我不是所有者,我无法读取文件,也无法更改权限。

但如果尝试使用以下方法更改它:

chown($filename, 'myusername');
chmod($filename, 777);

我尝试使用sudo 使用终端更改文件所有者和权限。那工作正常。 所以我也尝试将上面的函数与shell_exec()一起使用,让它在root中运行。

但是没有运气。

虽然我对文件权限编号没有太多经验,但 chown 命令也不起作用。

那么我应该如何更改文件的所有者和权限,以便我是所有者并且它可以被我的其他 php 脚本读写?

【问题讨论】:

文件上传时(在任何chmod之前),文件的权限是什么,user_data文件夹的权限是什么,分配的所有者是谁? 我创建了一个新的空文件,然后使用 fwrite() 写入它。该文件的权限为: Owner and Group: www-data Owner: read Group: execute Others: execute 在 user_data 文件夹上,我是所有者,三个人都设置为 Read, Write, Execute... 正如 TimWickstrong 所说,您应该在 chmod 命令中添加一个前导 0,但也会出现您可能没有 chmod 权限的情况。试试 $chmoded = chmod($filename,0777); if (!$chmoded)echo "Could not change the file permissions";... 另外,如果文件权限为 777,则无需 chown。 【参考方案1】:

您应该能够仅使用以下行对其进行 chmod:

chmod($filename, 0777);

注意 777 之前的 0。

在 chmod'ed 之前不要更改所有权

【讨论】:

没问题!很高兴我能帮上忙!

以上是关于fopen 创建文件,但是如何更改权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 PHP Monologger 创建的日志文件的默认文件权限?

function.fopen:无法打开流:PHP 中的权限被拒绝

fopen创建多级目录下文件的问题

您需要来自Administrator的权限才能对此文件进行更改,怎么办?

使用 PHP 打开或创建文件时权限被拒绝

由 tmpnam 创建的文件名的 fopen 在 mingw 上失败