繁体   English   中英

PHP和文件写权限

[英]PHP and file write permissions

我有一个包含3个不同php脚本的文件夹。 email.php txt.php android.php

我将电子邮件和/或txts传递到各自的脚本,并使用http POST将数据发送到android脚本。

本来我只有电子邮件和txt,使用这个都没关系

$data = '//data fields condensed into a single string obtained from email or txt';
$filename= "output.php";
$newFile= fopen($filename, 'w+');
fwrite($newFile, $data);
fclose($newFile);`

没有问题,脚本可以打开/写入文件,如果它没有退出,他们会创建它。 该文件夹不可写。

现在我有android.php脚本,最初它无法打开/创建output.php,直到我使整个文件夹可写。 现在它可以根据需要创建output.php。

现在的问题是,任何一个脚本都可以创建/写入output.php但是,一旦文件由其中一个脚本创建,其他脚本就无法写入它,即如果android脚本创建了output.php,则电子邮件和txt如果email或txt脚本创建output.php然后android脚本返回错误,脚本将返回错误

错误是“无法流式传输”或沿着这些线路发生的事情。

Lorenzo(SO上的用户)开始提到用户的一些事情(即被管道的电子邮件将被视为与http POST命令不同的用户)。 脚本创建具有权限644的output.php(没有执行,只有所有者可以写),我无法手动将权限更改为777 - 虽然我更愿意获得一种允许脚本创建它的方式 - 所以我可以清空该文件夹定期出于备份原因而不必记得将其放回等...

我想我可以将3个脚本合并为一个(希望如此),但也不愿意。 有没有人有任何其他想法?

谢谢

更新:由于我是新用户,无法“回答”我自己的问题 -

好的,所以在每个回复的人的帮助下,我找到了一个解决方案:电子邮件和txt脚本由用户'所有者'运行,htmlPOST由用户'?'运行。

我必须为用户'?'创建文件夹chmod 777。 上班

当每个脚本运行时,它会检查文件'output.php'。 如果它不存在,那么在fclose之后我添加了一个chmod 777--这样,其他用户运行的脚本可以稍后打开/写入。 如果该文件已经存在,那么我没有添加chmod,因为如果它是错误的用户则会产生错误。 这是一个简单的例子:

$data = '//data fields condensed into a single string obtained from email or txt';
$filename= "output.php";

if (file_exists($filename)){
$newFile= fopen($filename, 'w+');
fwrite($newFile, $data);
fclose($newFile);
} else {
$newFile= fopen($filename, 'w+');
fwrite($newFile, $data);
fclose($newFile);
chmod($file, 0777);
}

谢谢你的帮助!

如果这是一个许可问题而且你是

无法手动将权限更改为777

也许你可以试试:

$filename= "output.php";

// programatically set permissions
if(!file_exists($filename)){
    touch($filename);
    chmod($filename, 0777);
}

$data = '//data fields condensed into a single string obtained from email or txt';
$newFile= fopen($filename, 'w+');
fwrite($newFile, $data);
fclose($newFile);

好的,所以在每个回复的人的帮助下,我找到了一个解决方案:电子邮件和txt脚本由用户'所有者'运行,htmlPOST由用户'?'运行。

我必须为用户'?'创建文件夹chmod 777。 上班

当每个脚本运行时,它会检查文件'output.php'。 如果它不存在,那么在fclose之后我添加了一个chmod 777--这样,其他用户运行的脚本可以稍后打开/写入。 如果该文件已经存在,那么我没有添加chmod,因为如果它是错误的用户则会产生错误。 这是一个简单的例子:

$data = '//data fields condensed into a single string obtained from email or txt';
$filename= "output.php";

if (file_exists($filename)){
    $newFile= fopen($filename, 'w+');
    fwrite($newFile, $data);
    fclose($newFile);
} else {
    $newFile= fopen($filename, 'w+');
    fwrite($newFile, $data);
    fclose($newFile);

    chmod($filename, 0777);
}

谢谢你的帮助!

使用ls作为@DavidXia建议并检查谁拥有输出文件的所有权。 它们应该由运行创建它们的脚本的用户拥有。 如果文件归不同用户所有,那么您需要将用户放在一个公共组中,并分配该组拥有的所有文件(拥有这些文件的用户可以保持离散)。 然后你还想通过chmodg + rw分配给所有这些文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM