У меня есть папка с тремя разными скриптами php. email.php txt.php android.phpPHP и права на запись файла
Я отправляю электронные письма и/или 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 HOWEVER, как только файл создается одним из скриптов, другие не могут его записать Т.е. если скрипт android создает output.php , скрипты электронной почты и txt возвращают ошибки , если скрипты электронной почты или txt создают output.php, тогда ошибка возврата сценария андроида
ошибка, «неспособная передать поток» или что-то в этом роде.
Лоренцо (пользователь здесь, на SO) начал упоминать о пользователях (т. Е. Отправляемый по электронной почте сообщение будет рассматриваться как другой пользователь в команде http POST). Сценарии создают output.php с разрешениями 644 (без выполнения и только владелец может писать), и я не могу вручную изменить разрешения на 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 запустимым как один и тот же системный пользователь. Есть ли разница в выходе 'ls -l output.php', когда android vs other 2 создает файл? –
Можете ли вы рассказать о своем вопросе более обобщенным образом? У вас есть 3 потока/процессов, которые должны связываться между ними, и вы используете файлы в качестве очередей? чего вы пытаетесь достичь? Если вы можете это описать - вы можете получить более качественные ответы, например, используя существующий шаблон проектирования, с которым вы, возможно, не знакомы. – alfasin