PHP и права на запись файлов

У меня есть папка с тремя разными скриптами 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 HOWEVER, как только файл создается одним из сценариев, другие не могут писать ему. Т.е. если скрипт android создает output.php, адрес электронной почты и txt скрипты возвращают ошибки, если скрипты электронной почты или txt создают output.php, тогда ошибка возврата скрипта android

ошибка «неспособна передать fopen» или что-то в этом направлении.

Лоренцо (пользователь здесь, на SO) начал упоминать что-то о пользователях (т. Е. Отправляемый по электронной почте email будет рассматриваться как другой пользователь в команде http POST). Сценарии создают output.php с разрешениями 644 (без выполнения и только владелец может писать), и я не могу вручную изменить разрешения на 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); } 

Спасибо за вашу помощь!

Solutions Collecting From Web of "PHP и права на запись файлов"

если это проблема разрешения, и вы

не удалось вручную изменить разрешения на 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 предлагает и проверяет, кто владеет правами на выходные файлы. Они должны принадлежать пользователю, который выполнял скрипт, созданный ими. Если файлы принадлежат другим пользователям, вам нужно будет поместить пользователей в общую группу и назначить все файлы, принадлежащие этой группе (пользователи, которым принадлежат файлы, могут оставаться дискретными). Затем вы также захотите присвоить g + rw всем этим файлам через chmod .