我有一个文件夹,里面有三个不同的php脚本。email.php txt.php android.php
我将电子邮件和/或文本发送到它们各自的脚本中,并使用http POST向android脚本发送数据。
最初我只有电子邮件和文本,使用这些都是可以的。
$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脚本返回错误;如果电子邮件或txt脚本创建了output.php,则android脚本返回错误。
错误是“无法打开 fopen”之类的内容。
Lorenzo(在SO上的用户)开始提到用户方面的问题(例如传输的电子邮件将被视为与http POST命令不同的用户)。脚本使用权限为644(无执行权限,只有所有者可以写入)创建output.php,我无法手动更改权限为777-尽管我希望找到一种允许脚本创建它的方法-这样我可以定期清空文件夹进行备份,而不必记住放回去等等…
我想我可以将3个脚本合并为一个(希望如此),但是我不想这样做。还有其他人有什么想法吗?
谢谢
更新:由于我是新用户,无法“回答”自己的问题-
好的,借助每个人的帮助,我找到了解决方案: 电子邮件和txt脚本由用户“owner”运行,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);
}
感谢您的帮助!
android.php
创建output.php
时运行的用户与其他2个用户运行时不同。尝试让所有3个用户以相同的系统用户身份运行。当Android和其他2个用户创建文件时,ls -l output.php
的输出有差异吗? - David Xia