我的 Ubuntu 10.10 系统中有 4 个驱动器(是的,物理上在盒子里,SATA 连接),xampp 安装在 OS 驱动器上的 /opt/lampp/ 目录中。OS 驱动器(ssd,为了合理起见,我们称之为 drive1)具有正确的文件权限,允许 PHP(用户 www-data)读取/写入我的任何 htdocs 和 vhosts 文件夹。
这是我的 fstab 文件:
UUID=552A7C6B05CEAAD2 /media/v1tb ntfs-3g defaults,uid=1000 0 0
UUID=DE58539158536775 /media/v1.5tb ntfs-3g defaults,uid=1000 0 0
UUID=3D80C54D5D100280 /media/v2.0tb ntfs-3g defaults,uid=1000 0 0
另外,我尝试使用以下命令,并且复制得很好:
sudo -u www-data cp '/media/v2.0tb/path/to/file' '/media/v2.0tb/path/to/newfile'
我一直没有注意到的是,我传递给复制/重命名函数的字符串中有一个空格,并且没有封装在“中”,因为这应该是由于 php 的松散类型转换造成的。
谢谢大家的帮助!
答案1
首先:你不必重新格式化任何事物。
我建议对您的 fstab 条目进行以下设置:
UUID=X /media/<path> ntfs-3g uid=<your username>,gid=<a group containing www-data>,umask=007 0 0
umask=007
将组(www-data)和用户(您)的权限设置为 rwx(读、写、执行)。
答案2
如果您独自使用此服务器,没有其他用户可以利用它...让 www-data 运行一些无需 sudo 密码的命令。
sudo visudo
添加到文件末尾...
www-data ALL= NOPASSWD: /bin/mv
然后使用 PHP shell_exec():
$source = '/media/v2.0tb/path/to/file';
$destination = '/media/v2.0tb/path/to/newfile';
$command = 'sudo mv ' . $source . ' ' . $destination;
$result = shell_exec($command);
echo $result;
或者使用执行指令,如果你不介意花一点时间学习的话。这很可能是可行的方法。