php - 如何使 MySQL INTO OUTFILE 输出可按组/每个人写入?
问题描述
我刚买了一台新笔记本电脑(一台运行 Mac OS Big Sur 的 M1 Macbook),我有时间在本地设置我的一个项目;这个项目的两个大组件是一个 MySQL 数据库和一个 PHP webapp,在我的机器上我都通过非 VM XAMPP(版本 8.0.8)运行 - 虽然从技术上讲,XAMPP 只有 MariaDB,而不是 MySQL(但我'从来没有注意到一个问题)。
INTO OUTFILE...
webapp 的一部分使用 MySQL 的功能生成动态 .csv 。但是,一旦 MySQL 输出文件,PHP 脚本需要在将其下载到浏览器之前对其进行读取和操作,因此运行 PHP 脚本的用户需要写入权限。
该脚本位于/Applications/XAMPP/project/webapp/download.php
,并且所有内容都设置为全部访问sudo chmod -R 777 project/
(我知道,这是不好的做法,但这仅用于开发)。
exec('whoami')
告诉我脚本在daemon
XAMPP 的 Apache 服务器的用户下运行。该脚本由myusername
一组admin
包含root
和myusername
.
生成时,来自 MySQL 的文件由_mysql
具有 groupadmin
权限的用户拥有,即 644。因此,当此脚本运行时,它会生成文件,但在读取/处理文件数据后-rw-r--r--
调用时会收到以下 PHP 警告:file_put_contents()
Warning: file_put_contents(/Applications/XAMPP/xamppfiles/htdocs/project/webapp/XXXXXXXXXX.csv):
Failed to open stream:
Permission denied in /Applications/XAMPP/xamppfiles/htdocs/project/webapp/download.php on line 26
我不知道如何让除 mysql 用户之外的任何人写入此文件。关键是我的旧机器 - 运行 Mojave 的 2013 Macbook Pro - 没有任何明显不同的配置,并且它可以工作(它确实使用 XAMPP 7.4.6,但除了使用 PHP 7 而不是 8 之外,差异似乎很小)。我在那里注意到,MySQL 生成的文件有-rw-rw-rw-
权限,所以管理员组(或者我猜每个人,因为我不相信守护进程属于那里的管理员组)可以写入它 - 我就是无法获得我的新电脑来做。
除了一般的权限摆弄(我不是这种东西的向导),搞乱组等等,我真正尝试过的只是UMASK
在 mysql.server 和 mysqld_safe 中设置 MySQL 环境变量;似乎没有任何效果,而且像这样的配置更改让我很怀疑,因为我的旧电脑不需要它。并且作为记录,虽然不确定它是否相关 - secure_file_priv
MySQL 中的变量设置为空白并且 root / localhost 组合具有文件权限;生成文件本身不是问题。
如何在不更改一行代码的情况下让事情顺利进行?很明显,问题出在我的配置中。不确定是否值得一提,但我确实从自制软件安装了另一个 MySQL ......那里可能有一些冲突吗?话虽如此,我的旧电脑也有另一个 MySQL 实例,但安装在 MySQL 网站之外。
解决方案
推荐阅读
- java - 我需要我的代码来查找所有分数的平均值并在对话框中打印出来
- c# - 我的代码源中的 C# 错误(使用 System.Net.Http)
- php - 如何在不创建任何一个类的情况下查看一个类是否是另一个类的实例?
- asp.net - 如何将 Auth0 与现有的 ASP.NET Core Identity 数据库一起使用?
- python - 用分隔符连接数据框的列
- jquery - 当您在 ASP.NET mvc 中循环时,如何在 jquery 中启用/禁用关联复选框的文本框?
- angular - Angular2使用单向数据绑定更新视图
- ruby - 按子数组中的三项排序
- javascript - 如何处理 JavaScript 中的条件复选框选择?
- xcode - dyld:未找到符号:_OBJC_IVAR__$_NSTextViewIvars.sharedData