【发布时间】:2019-06-27 16:17:40
【问题描述】:
运行 Ubuntu 18.04、Apache/2.4.29、PHP 7.2.10。
我无法从 PHP 读取/写入已安装的驱动器。
这是我的示例代码:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
$folder = '/media/superuser/HDD4TB_CRYPT/nextcloud_data';
var_dump(ini_get('open_basedir'));
file_put_contents($folder.'/x.txt', "AA");
echo file_get_contents($folder."/x.txt");
phpinfo();
这是输出:
字符串(0) ""
警告: file_put_contents(/media/superuser/HDD4TB_CRYPT/nextcloud_data/x.txt): 无法打开流:权限被拒绝 /var/www/html/nextcloud/x.php 第 9 行
警告: 文件获取内容(/media/superuser/HDD4TB_CRYPT/nextcloud_data/x.txt): 无法打开流:权限被拒绝 /var/www/html/nextcloud/x.php 在第 10 行
这些是文件夹详细信息:
superuser@SuperTower:/var/www/html/nextcloud$ ls -al /media/superuser/HDD4TB_CRYPT/
total 28
drwx------ 4 superuser superuser 4096 feb 3 20:55 .
drwxr-x---+ 4 root root 4096 feb 2 00:06 ..
drwx------ 2 root root 16384 feb 1 22:49 lost+found
drwxrwxrwx 2 www-data www-data 4096 feb 3 21:29 nextcloud_data
我尝试编辑 open_basedir,但这无助于解决任何问题,所以我只是将其注释掉。因此open_basedir 在phpinfo() 中有no value。文件夹被改写为 www-data(这是 apache 用户),也改写为 777。
/media/superuser/ 包含在我的 PC 上安装了驱动器的文件夹。 superuser 是我在 Ubuntu 中的用户名。
感谢您的任何想法!
附言
我也尝试向我的文件夹添加符号链接:
superuser@SuperTower:/var/www/html/nextcloud$ ls -al data
lrwxrwxrwx 1 www-data www-data 45 feb 3 21:05 data -> /media/superuser/HDD4TB_CRYPT/nextcloud_data/
并使用
$folder = '/var/www/html/nextcloud/data';
但结果完全一样。
我也试过添加
<Directory /var/www/html/nextcloud/data>
Options +FollowSymLinks
Allow from All
</Directory>
结果行为没有变化:/
【问题讨论】:
-
是的,看到了,但似乎是一个不好的解决方案,我自己不挂载文件夹,/etc/fstab 为我这样做
-
您必须确保 webserver 进程(将 PHP 作为子进程或模块运行)的用户 或 组具有对该目录的访问权限。对于 Apache,这通常是用户和组
www-data。所以先找出你的网络服务器的用户和组,然后确保共享的目录权限是正确的。 -
从我的 ls 输出中可以看到 - 有问题的 www-data 拥有我要写入的文件夹
-
x.txt文件的权限呢?