1

在提出我的第一个问题之前,我已经尝试了一段时间并尽可能多地调查了途径。

我有一个非常简单的 csv 文件。一列,数据由 linux 换行符分隔。我想将它导入到表(代码)的第二列(密码)中。第一列是主键自动递增。

这是简单的 csv 数据(linux 换行 - \n)

A12345678911
A12345678912
A12345678913
A12345678914

这是收集文件的表格。

<form enctype="multipart/form-data" action="upload_webcodes.php" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        <input type="hidden" name="success" value="success" />
    Send this file: <input name="webcodeupload" type="file" />
    <input type="submit" value="Send File" />
</form>  

这是试图运行查询以将 tmp 文件加载到数据库中的 php。

<?php

function dbconnect(){
$db = mysql_connect('localhost', 'root', 'root');
mysql_select_db("mydatabase", $db);
return $db;
}

if ($_FILES['upload']['type'] === 'text/csv') { 
    $database = dbconnect();
    $getfile = $_FILES['upload']['tmp_name'];   
    $sql = " LOAD DATA LOCAL INFILE $getfile INTO TABLE codes (`passcode`) LINES TERMINATED BY '\n' ";
    mysql_query($sql);   
}
?>

我无法让它工作。我正在用 MAMP 在本地尝试这个。/tmp/php 文件夹 Date Modified 得到更新,但我在那里看不到文件。我什至尝试过更大的文件,因为我的测试文件非常简单。提交表单后,我已打印出 $_FILES 数组。

Array
(
    [webcodeupload] => Array
        (
            [name] => Aimport.csv
            [type] => text/csv
            [tmp_name] => /Applications/MAMP/tmp/php/phpsp9ezx
            [error] => 0
            [size] => 52
        )

)

似乎预期的结果在那里?我已经在 phpmyAdmin 中尝试过查询,如果我删除了 LINES TERMINATED BY 子句,它就可以工作。我怀疑这是 phpmyAdmin 的事情,我也尝试过这段代码在查询中使用和不使用该子句。

此外,加载页面时还有一些“未定义索引”错误。我有点理解为什么,并且已经阅读了此处指示掩盖错误的方法的线程,但我有兴趣知道如何避免它们而不是隐藏它们。

任何输入将不胜感激。

谢谢。

4

2 回答 2

0

首先,您已经正确分析,该文件应该在/tmp/php. 所以,你应该检查

  1. /tmp/php文件夹中的权限。
  2. 为了让 MySQL 能够从/tmp/php目录中读取文件,在 linux 中,不要忘记/etc/apparmor.d/usr.sbin.mysqld通过添加这一行来设置 apparmor 配置/tmp/php/** rwk,
于 2014-09-04T02:40:55.047 回答
0

将您的条件更改为:

if ($_FILES['webcodeupload']['type'] == 'text/csv') {
    // what you have now
}

您提供的转储显示表单输入字段是“webcodeupload”,但您的 PHP 正在检查“上传”。

脚本结束时文件不存在的原因很好,这就是 php 的工作原理。您必须调用该move_uploaded_file函数才能将上传的文件实际移动到某处,否则 PHP 会在脚本结束时将其删除(以防止资源消耗攻击)。

请注意,您的if陈述中可能存在其他问题,但这会让您更接近。

于 2014-09-04T02:47:31.967 回答