我有一个包含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,则email和txt脚本会返回错误 如果电子邮件或txt脚本创建output.php然后android脚本返回错误
错误是“无法传输fopen”或其他内容。
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);
}
感谢您的帮助!
答案 0 :(得分:3)
如果是权限问题且你是
无法手动将权限更改为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);
答案 1 :(得分: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($filename, 0777);
}
感谢您的帮助!
答案 2 :(得分:1)
使用ls作为@DavidXia建议并检查谁拥有输出文件的所有权。它们应该由运行创建它们的脚本的用户拥有。如果文件归不同用户所有,那么您需要将用户放在一个公共组中,并分配该组拥有的所有文件(拥有这些文件的用户可以保持离散)。然后,您还需要通过 chmod 为所有这些文件指定 g + rw 。