
Могу ли я задать вопрос о разрешении файла? Я настроил сервер Ubuntu, на котором запустился Apache. У меня есть простая форма загрузки php, и я могу загрузить файл в /var/www/site/uploads следующим образом.
sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 1736
drwxrwxrwx 2 www-data www-data 4096 Oct 18 02:53 ./
drwxrwxrwx 3 sandbox sandbox 4096 Oct 18 00:42 ../
-rw-r--r-- 1 www-data www-data 145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 www-data www-data 166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 www-data www-data 1451489 Oct 18 02:53
6453_3d_landscape_hd_wallpapers_green.jpg
Есть ли возможность загрузить файлы и они будут отображаться как
-rw-r--r-- 1 sandbox sandbox 145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 sandbox sandbox 166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox sandbox 1451489 Oct 18 02:53
6453_3d_landscape_hd_wallpapers_green.jpg
так что я мог бы сразу скормить их ожидающему/работающему скрипту оболочки. Прямо сейчас ожидающий скрипт (перемещение, контрольные суммы, переименование, изменение размера и т. д.) не может ничего сделать с загруженными файлами с атрибутами www-data. Если я просто сделаю это как локальная учетная запись, например
sandbox@sandbox-virtual-machine:/var/www/site/uploads$touch testfile
тогда скрипт сможет работать так, как я хочу. Буду благодарен за любые предложения, заранее спасибо.
Спасибо всем, кто помогал мне, и я смог добиться прогресса.
Теперь я близок к решению и прикреплю вывод
sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 388
drwxrwxrwx 2 www-data www-data 4096 Oct 18 04:22 ./
drwxrwxrwx 3 sandbox sandbox 4096 Oct 18 04:17 ../
-rw-r--r-- 1 sandbox sandbox 166947 Oct 18 04:21 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox sandbox 219808 Oct 18 04:20 adafruit_pi.png
-rw-rw-r-- 1 sandbox sandbox 0 Oct 18 04:22 test
Как мне установить разрешение на загруженные файлы, например, 'test', только с разницей в средней группе. Например, adafruit_pi.png против test. Какое выражение мне вставить в код php, пожалуйста?
решение1
PHP работает как веб-приложение под управлением Apache, и это тот www-data
пользователь, которого вы видите.
После загрузки вы можете изменить владельца и группу файлов с помощью:
exec( 'chgrp sandbox 3*.jpg' );
exec( 'chown sandbox 3*.jpg' );
Имейте в виду, что после изменения разрешений веб-сервер не сможет записывать файлы, удалять или перемещать их.
решение2
Попробуйте добавить пользователя www-data в группу sandbox
решение3
Попробуйте изменить пользователя и группу для службы Apache: Найдите в файле конфигурации Apache (я думаю, в Ubuntu он находится в /etc/apache2/apache2.ini) и найдите строки:
User www-data
Group www-data
и измените www-data
на sandbox
.
Обратите внимание, что sandbox
пользователь должен иметь разрешения на чтение и запись в папке webroot.
Надеюсь, поможет.
ПРИМЕЧАНИЕ: Это следует реализовать в целях тестирования, не рекомендуется для производственной среды.