上周这是有效的,今天却没有。我没有更改php文件。我在临时工作中所做的就是在我的Ubuntu 15.04服务器上运行apt-get update。
我的MySQL声明是:
LOAD DATA INFILE "/var/www/html/uploads/TitleList.csv" INTO TABLE tblLSITitleList FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "\"" IGNORE 5 LINES;
这会出现以下错误:
找不到文件'/var/www/html/uploads/TitleList.csv'(错误代码:13 - 权限被拒绝)
我尝试过以下解决方案(这是我上周初解决这个问题的方法: LOAD DATA INFILE Error Code : 13
我检查了apparmor,上传文件夹仍在那里。
我也试过chmodding各种权限,包括777,但没有任何帮助。
有任何聪明的建议吗?
答案 0 :(得分:3)
虽然可以将CSV复制到mysql数据目录中,但这不是一个好的持续解决方案。如果您正在使用SQL命令行或代码,请在查询中包含LOCAL选项。
LOAD DATA INFILE
尝试LOAD DATA LOCAL INFILE
如果您使用cPanel或phpmyadmin导入CSV using LOAD DATA
,请务必启用Use LOCAL keyword
。这在共享服务器环境中对我有用。
这可以防止每次都必须将CSV复制到MySQL数据目录。
答案 1 :(得分:2)
来自文档:
For security reasons, when reading text files located on the server,
the files must either reside in the database directory or be
readable by all
我建议将.csv文件复制到数据库目录,例如
cp TitleList.csv /var/lib/mysql/yourdbname/TitleList.csv
然后
LOAD DATA INFILE 'TitleList.csv' INTO etc ...
答案 2 :(得分:0)
就我而言,LOAD DATA INFILE
是第一个数据集的成功案例。
但是有了第二个数据集,我得到了错误代码13。
我所做的(赢得用户),我按CTRL+ALT+DELETE
,然后选择Start Task Manager
,然后转到processes
选项卡,选择Excel
,然后按{{ 1}}。
然后再次尝试End Task
并成功。
注意: 在此之前,我试图打开CSV文件只是为了检查数据集。 花了太长时间,因此,我在打开文件之前立即将其关闭。
也许不完整的过程干扰了加载过程。
我不确定使用PHP,因为我只是使用phpmyadmin并使用MySQL
答案 3 :(得分:0)
添加 LOCAL 关键字对我有用。我还确保该文件具有 READ 权限,因为我在 Ubuntu 中工作:
LOAD DATA LOCAL INFILE '/path/to/file/name.csv'
INTO TABLE 'table_name'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';