Php 如何允许用户在MySQL处理后检索文件?

Php 如何允许用户在MySQL处理后检索文件?,php,mysql,linux,permissions,vps,Php,Mysql,Linux,Permissions,Vps,我试图让一个网站运行在一个VPS linux服务器上,由Inmotion托管,允许用户上传一个txt、csv或excel文件。上传该文件后,将使用一些PHP调用MySQL函数进行处理。到目前为止,一切正常。处理完成后,MySQL将把数据库写入OUTFILE。这就是我遇到问题的地方 我无法将输出文件写入任何目录,它必须位于MySQL数据目录或“/var/etc/tmp”目录中。否则,它将抛出错误代码13:权限被拒绝错误。真的,我的问题是: 如果可能,我如何允许MySQL写入数据目录之外的目录?如果

我试图让一个网站运行在一个VPS linux服务器上,由Inmotion托管,允许用户上传一个txt、csv或excel文件。上传该文件后,将使用一些PHP调用MySQL函数进行处理。到目前为止,一切正常。处理完成后,MySQL将把数据库写入OUTFILE。这就是我遇到问题的地方

我无法将输出文件写入任何目录,它必须位于MySQL数据目录或“/var/etc/tmp”目录中。否则,它将抛出错误代码13:权限被拒绝错误。真的,我的问题是:

  • 如果可能,我如何允许MySQL写入数据目录之外的目录?如果可能的话,如何做到这一点

  • 如果不可能,如何将文件从位于“var/etc/tmp”中的tmp文件移动到诸如“/home/user/Directories”之类的目录

  • 我希望我提供了足够的信息。这是我的第一个问题StackExchage


    谢谢大家!

    正如评论者已经指出的,使用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将处理后的数据写入文件并不能很好地扩展,或者成为与您合作或在您之后维护系统的其他人容易理解的东西

    如果您只需要将已处理的
    .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创建文件后更正文件权限

    您可以尝试像这样使用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创建文件后更正文件权限

    在mysql中执行文件处理确实是一件不同寻常的事情。你确定这是最好的计划吗?我想这已经在这里得到了诚实的回答,我认为这是最好的计划@tadman。我们正在处理从500000行到数百万行的数据,我的目标是为每一行插入一个字符到一个新的列中,并用新的列和字符返回它们的文件。我需要尽快完成这项工作,我不认为PHP可以像MySQL那样快速处理这么多的数据。如果这不是最好的路线,你有什么想法吗?我非常感谢您在这方面提供的任何帮助。如果您需要速度,除了速度之外别无其他,我发现Node.js在脚本语言方面的速度快得离谱。它只是JavaScript的核心。与键入
    node chomp.js myfile.txt
    @shayne\ux相比,它可能可以在更短的时间内快速浏览一百万行。请查看下面我更新的答案,看看这是否是您可能的途径。在MySQL中进行文件处理确实是一件不同寻常的事情。你确定这是最好的计划吗?我想这已经在这里得到了诚实的回答,我认为这是最好的计划@tadman。我们正在处理从500000行到数百万行的数据,我的目标是为每一行插入一个字符到一个新的列中,并用新的列和字符返回它们的文件。我需要尽快完成这项工作,我不认为PHP可以像MySQL那样快速处理这么多的数据。如果这不是最好的路线,你有什么想法吗?我非常感谢您在这方面提供的任何帮助。如果您需要速度,除了速度之外别无其他,我发现Node.js在脚本语言方面的速度快得离谱。它只是JavaScript的核心。与键入
    node chomp.js myfile.txt
    @shayne\ux相比,它可能可以在更短的时间内快速浏览一百万行。请查看下面我的更新答案,看看这是否是您的可行路径。