如何允许用户在 MySQL 处理后检索文件?
How to allow user to retrieve file after being processed by MySQL?
我正尝试在 Inmotion 托管的 VPS linux 服务器上 运行 创建一个网站,允许用户上传 txt、csv 或 excel文件。上传所述文件后,将使用一些 PHP 调用 MySQL 函数对其进行处理。到目前为止一切正常。处理完成后,MySQL 会将数据库写入 OUTFILE。这是我 运行 遇到问题的地方。
我无法将 OUTFILE 写入任何目录,它必须在 MySQL 数据目录或“/var/etc/tmp”目录中。否则它会抛出 Errcode 13: permission denied 错误。真的,我的问题是:
如果可能,我怎样才能允许MySQL写入数据目录之外的目录?如果可以,请问如何实现?
如果不可能,我如何将文件从位于 "var/etc/tmp" 的 tmp 文件移动到诸如“/home/user/Directories”之类的目录?
希望我提供了足够的信息。这是我在 StackExchange 上的第一个问题!
谢谢!
正如评论者已经指出的那样,使用 MySQL 将处理后的数据写入文件并不是可以很好地扩展的东西,也不是其他与您合作或维护系统后容易理解的东西你.
如果您只需要将处理过的 .csv
转储到某处,请使用 PHP 为您完成。如果您要转储 .csv
供以后检索,并且 MySQL 中仍有数据,那么为什么需要 .csv
?
直接回答第 2 个问题:写入后使用 PHP 移动文件。
rename("/var/etc/tmp/your_file.csv", "/home/user/Directories/your_file.csv");
编辑
根据您说明此问题目标的评论,并且由于您在 Linux,您可能只需使用 bash 命令即可完成。如果要为所有行添加相同的字符作为 csv 文件中的新列,则可以使用 sed 来完成。为了这个例子,我假设文件中的最后一列后面没有定界符。我也只是使用资本 A
作为占位符。
sed -e 's/$/,A/' -i filename.csv
现在我的 Linux-foo 有点生疏了,所以请先在您的环境中使用不重要的测试数据进行测试。
您可以尝试使用 mysql 这样的查询
SELECT id,name,surname
FROM users
WHERE foo = 'bar'
INTO OUTFILE '/var/www/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
并记得在 mysql 创建后更正文件权限
我正尝试在 Inmotion 托管的 VPS linux 服务器上 运行 创建一个网站,允许用户上传 txt、csv 或 excel文件。上传所述文件后,将使用一些 PHP 调用 MySQL 函数对其进行处理。到目前为止一切正常。处理完成后,MySQL 会将数据库写入 OUTFILE。这是我 运行 遇到问题的地方。
我无法将 OUTFILE 写入任何目录,它必须在 MySQL 数据目录或“/var/etc/tmp”目录中。否则它会抛出 Errcode 13: permission denied 错误。真的,我的问题是:
如果可能,我怎样才能允许MySQL写入数据目录之外的目录?如果可以,请问如何实现?
如果不可能,我如何将文件从位于 "var/etc/tmp" 的 tmp 文件移动到诸如“/home/user/Directories”之类的目录?
希望我提供了足够的信息。这是我在 StackExchange 上的第一个问题!
谢谢!
正如评论者已经指出的那样,使用 MySQL 将处理后的数据写入文件并不是可以很好地扩展的东西,也不是其他与您合作或维护系统后容易理解的东西你.
如果您只需要将处理过的 .csv
转储到某处,请使用 PHP 为您完成。如果您要转储 .csv
供以后检索,并且 MySQL 中仍有数据,那么为什么需要 .csv
?
直接回答第 2 个问题:写入后使用 PHP 移动文件。
rename("/var/etc/tmp/your_file.csv", "/home/user/Directories/your_file.csv");
编辑
根据您说明此问题目标的评论,并且由于您在 Linux,您可能只需使用 bash 命令即可完成。如果要为所有行添加相同的字符作为 csv 文件中的新列,则可以使用 sed 来完成。为了这个例子,我假设文件中的最后一列后面没有定界符。我也只是使用资本 A
作为占位符。
sed -e 's/$/,A/' -i filename.csv
现在我的 Linux-foo 有点生疏了,所以请先在您的环境中使用不重要的测试数据进行测试。
您可以尝试使用 mysql 这样的查询
SELECT id,name,surname
FROM users
WHERE foo = 'bar'
INTO OUTFILE '/var/www/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
并记得在 mysql 创建后更正文件权限