我已经尝试了一段时间,并在问我第一个问题之前尽可能多地调查一下。
我有一个非常简单的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的事情,我也在查询中使用和不使用该子句尝试了这段代码。
此外,加载页面时会出现一些“未定义的索引”错误。我有点理解为什么,并在这里阅读线程,指出掩盖错误的方法,但我有兴趣知道如何避免它们而不是隐藏它们。
真的很感激任何意见。
感谢。
答案 0 :(得分:0)
首先,您已正确分析,该文件应位于/tmp/php
。所以,你应该检查
/tmp/php
文件夹中的权限。/tmp/php
目录中读取文件,在linux中,不要忘记通过添加此行/etc/apparmor.d/usr.sbin.mysqld
在/tmp/php/** rwk,
中设置apparmor配置答案 1 :(得分:0)
将您的条件更改为:
if ($_FILES['webcodeupload']['type'] == 'text/csv') {
// what you have now
}
您提供的转储显示表单输入字段为&#34; webcodeupload&#34;,但您的PHP正在检查&#34;上传&#34;。
当你的脚本结束时文件不存在的原因很好,这就是php的工作方式。您必须调用move_uploaded_file
函数才能将上传的文件移动到某处,否则PHP会在脚本结束时删除它(以防止资源消耗攻击)。
请注意,if
声明中的内容可能存在其他问题,但这会让您更接近。