如何从PHP访问第二个磁盘驱动器?

时间:2017-01-11 23:44:34

标签: php linux apache

我在CentOS 7上运行Apache 2.4和PHP 7.我运行一个基于Web的文件服务器。目录结构如下所示:

/var/www/example.com/public_html # Document Root
/var/www/file-transfer-center/   # Location of files for file server

一切都很好,但这些文件所在的分区正在变满。机器上还有另一个分区:

lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 953.8G  0 disk
├─sda1            8:1    0   500M  0 part /boot
└─sda2            8:2    0 953.3G  0 part
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0     4G  0 lvm  [SWAP]
  └─centos-home 253:2    0 899.2G  0 lvm  /home
sdb               8:16   0   500G  0 disk
└─sdb1            8:17   0   500G  0 part
sdc               8:32   0  1000G  0 disk
└─sdc1            8:33   0  1000G  0 part
sr0              11:0    1  1024M  0 rom

如果我运行df -aTh | grep centos

/dev/mapper/centos-root xfs           50G   17G   34G  34% /
/dev/mapper/centos-home xfs          899G   34G  866G   4% /home

因此我觉得我可以将我的file-transfer-center目录移至/home并且我将全部设置完毕。

我复制了文件并将文件传输软件路径的配置更改为/home/file-transfer-center,但是当我尝试访问这些文件时,php-fpm给了我错误:

  

PHP致命错误:未捕获LogicException:根路径/ home / file-transfer-center不可读。

我检查了权限和file-transfer-center及其所有内容,如果它的内容归apache所有,而wheel组拥有目录和文件的775和664权限,分别

我写了一个简单的测试:

var_dump(fopen('/home/file-transfer-center/fa498800-4102-46be-a7a6-3384f242a949', 'r'));

结果是false。如果我将该测试中的路径替换为原始file-transfer-center路径,则会生成resource(5) of type (stream)

我查了open_basedir,没有设置。与user_dir相同。我无法找到任何表明该目录不受PHP限制的内容。

我在这里缺少什么?我在分析中是否正确/home正在同一物理驱动器的单独逻辑分区上运行?这与它有关吗?

如何明确告诉PHP访问/home/file-transfer-center很酷?

编辑:我的网络服务器以用户apache运行,/home/file-transfer-center目录由apache拥有:

drwxrwxr-x. 2 apache wheel 60K Jan 11 17:12 file-transfer-center

1 个答案:

答案 0 :(得分:1)

我相信您的* nix文件系统并不关心您拥有多少实际硬盘。所有文件都统一为单个文件系统。

您不能只将文件或文件传输中心目录移动到/ home目录中。该目录,至少在我的系统上,由root拥有:

$ ls -dal /home
drwxr-xr-x 4 root root 4096 Apr 28  2016 /home

您需要sudo权限才能将任何文件或目录移动到/ home目录。

如果您刚刚将目录文件传输中心从/ var / www / file-transfer-center移动到/ home / file-transfer-center,我想这个目录仍然有它的相同的权限。但是,如果您创建了一个名为/ home / file-transfer-center的新目录并将内容和子目录复制到其中,则它可能由root:root拥有。我建议您使用以下命令检查/ home / file-transfer center的权限:

ls -dal /home/file-transfer-center

看看apache是​​否可以访问它。

您还应确保为Web服务器分配正确的权限。要找出Web服务器所在的服务器,请通过您的Web服务器访问此PHP脚本

<?
passthru("whoami");

它应该输出您的Web服务器的用户名。该用户应具有对/ home / file-transfer-center目录的读取和/或写入权限。

编辑: 仔细观察OP,我发现在文件权限结束时有一段时间(。) - 显然这表示SELinux限制。 SELinux可以repr。考虑将文件传输中心目录移回/ var / www / file-transfer-center - 你可以在那里安装第二个驱动器吗?