Как скопировать PHP через SMB-монтирование
У меня есть простой скрипт, который копирует файл с одного SMB-подключения на другое. Исходная файловая система та же, но веб-сервер другой. Я использую PHP для обработки файла, копируя его во временный каталог, а затем выполняя над ним дополнительные задачи. Эта настройка работала в какой-то момент времени, но, похоже, она больше не работает правильно. Может кто-нибудь указать мне правильное направление?
Крепления Fstab:
//192.168.0.x/share /media/folder smbfs username=user,password=mypass
//192.168.0.x/share2 /media/folder2 smbfs username=user,password=mypass
Php код:
copy('/media/folder/filename.txt','/media/folder2/temp/filename.txt');
Ошибка:
Warning: copy(/media/folder2/temp/filename.txt): failed to open stream: Permission denied in /www/myphp.php on line xx
Разрешения для папок (не для подключения, а для исходной папки на файловом сервере):
/media/folder = 777
/media/folder2/temp = 777
3 answers
system("cp /media/folder/filename.txt /media/folder2/temp/filename.txt");
Может сработать для вас.
Звучит как вопрос, относящийся к разрешениям и операционной системе, а не к PHP.. какой веб-сервер? как работает сервер? никто: никто? может ли никто: никто или www-root: www-root читать/записывать данные в каталоги, к которым вы пытаетесь получить доступ?
sudo su - nobody
- вероятно, не будет работать, так как, скорее всего, у него будет оболочка
/bin/false
- никто не может быть неподходящим аккаунтом..
ps auxw | grep apache | awk {'print $1'}
и посмотрите, от имени какого пользователя он запущен... затем попробуйте перейти на эту учетную запись сsudo
Прежде чем PHP сможет получить доступ к записи файлов, вам необходимо убедиться, что пользователь, от имени которого работает веб-сервер... имеет доступ для чтения/записи в каталог, в котором вы пробуете свой copy
.
Я изменил команду на:
copy('/media/folder/filename.txt','/tmp/filename.txt');
Очевидно, обрабатывать файлы на общем ресурсе SMB сложнее, чем я думал. Файл следует удалять при перезагрузке компьютера или, возможно, через регулярные промежутки времени, в зависимости от настроек системы.