У меня есть скрипты, позволяющие назначать файлы продуктам. Чтобы избежать проблем с повторением именных файлов, у каждого продукта есть определенный каталог.
Директа uplad, которая содержит все каталоги для конкретных продуктов, выглядит следующим образом.
4 drwxrwx — x 3 pepe pepe 4096 9 января 17:08.
20 drwxrwxr-x 35 pepe pepe 20480 9 января 15:42 ..
4 drwxrwxr-x 2 apache apache 4096 9 января 17:08 001
Apache запускается под пользователем «apache», а «apache» устанавливается как часть группы «pepe».
Если я пытаюсь загрузить файл в продукт, у которого нет его каталога, сценарии создают каталог (с разрешениями, указанными для dir «001»), а затем пытаются загрузить файл, но не удается.
Если я изменяю владельца каталога на pepe.pepe в SSH, а затем перезагружаю файл, он отлично работает.
Почему apache создает каталог, который не может быть записан в следующей строке кода?
Как мне избежать необходимости вручную менять владельца созданного каталога, потому что мой клиент, очевидно, не может сделать это при назначении файлов всем его продуктам.
Можете ли вы попробовать chgrp () в вашем PHP, чтобы изменить группу на «pepe»? Если это не работает, по крайней мере, ошибки дадут вам подсказку. Еще один из «безопасного режима»:
Когда безопасный режим включен, PHP проверяет, являются ли файлы или каталоги
у которого используется тот же UID (владелец), что и у сценария
выполняется
Я бы попробовал изменить (вручную) группу-владельца родительского каталога (ов) на «apache».
Вы должны изменить права доступа к только что созданному каталогу:
chmod('/path/to/directory', 0775);