php / mariadb更新后禁止加载数据本地文件**已解决**

时间:2019-04-23 19:59:51

标签: php mariadb load-data-infile

我知道之前已经有人问过这个问题,但是我找不到任何新的帖子可以提供帮助。直到今天,LOAD DATA LOCAL INFILE一直运行良好。除了为PHP和(不确定,但我认为)MariaDB运行更新之外,我没有做任何其他更改。我现在正在运行 PHP 7.2.17 MariaDB 10.1.38

现在我得到这个错误: 警告:mysqli :: query():禁止加载数据本地文件

我检查了我能找到的东西: -数据库用户拥有所有权限,即使root用户也遇到此错误 -检查my.cnf中的条目 local-infile = 1

Load语句可在mysql命令行中正常运行,但不能在PHP脚本中运行。

这是我运行导入的方式:

define ('DB_USER', "db_user");
define ('DB_PASSWORD', "my_password");
define ('DB_DATABASE', "prosjekt");
define ('DB_HOST', "localhost");

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);

我在最后一行收到错误-> $ mysqli-> query($ query);

$query = <<<eof
    LOAD DATA LOCAL INFILE '$fileName'
     INTO TABLE prosjekt
     FIELDS TERMINATED BY ','  ENCLOSED BY '"'
     LINES TERMINATED BY '\r'
    (prosjektnavn,prosjektstatus,prosjektbesk,oppdragsgiver,prosjektans,prosjektdelt,start,slutt,prosjektnr,prosjekttype,sortnr,ant_rapport,litt_link)
eof;

$mysqli->query($query);

因此,我可以在mysql控制台中正常运行,但不能在PHP脚本中运行,今天它开始失败。任何想法如何解决? 当我运行 SHOW VARIABLES; 时,我明白了,它应该可以工作吗?

打开本地文件

2 个答案:

答案 0 :(得分:1)

我只是唤醒了我的一个应用程序,使用php7.2和mysqli做着完全相同的事情。

当我检查less /var/log/apt/history.log时,好像我的php7.2已于昨晚升级为Ubuntu自动安全更新的一部分。

我的local_infile变量也处于启用状态,但似乎没有起作用。我解决了以下问题:

mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true)

答案 1 :(得分:1)

我解决了这个问题,并为有兴趣的人解决了。我读了this贴子有帮助

似乎PHP升级已更改了我的php.ini。我认为我对保留配置或覆盖配置存在一些疑问。不确定我在那里回答正确了!

由于这是一项计划工作,我需要在此处修复php.ini:

/etc/php/7.2/cli/php.ini

取消注释此行或对其进行更改:

mysqli.allow_local_infile =开

如果您在相应目录/etc/php/7.2-> / fpm / apache

中运行php-fpm,则对php.ini也将执行相同的操作