ЗАГРУЗКА ДАННЫХ ЛОКАЛЬНЫЙ INFILE запрещен после обновления php / mariadb - PullRequest
0 голосов
/ 23 апреля 2019

Я знаю, что об этом уже спрашивали, но я не смог найти новые посты, которые могли бы помочь. 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; Я получаю это, чтобы оно работало?

local_infile ON

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Я решил это и для всех, кто заинтересован. Я прочитал этот пост, который помог

Кажется, обновление PHP изменило мой php.ini. Я думаю, что у меня есть несколько вопросов, чтобы сохранить конфигурацию или перезаписать ее. Не уверен, что я ответил правильно там!

Так как это работа cron, мне нужно исправить php.ini здесь:

/ и т.д. / PHP / 7,2 / кли / php.ini

Раскомментируйте эту строку или измените ее:

mysqli.allow_local_infile = On

Вы бы сделали то же самое для php.ini, если вы запускаете php-fpm в соответствующих каталогах /etc/php/7.2 -> / fpm / apache

1 голос
/ 24 апреля 2019

Я только что проснулся, чтобы одно из моих приложений делало то же самое, используя php7.2 и mysqli.

Похоже, мой php7.2 был обновлен вчера вечером как часть автоматических обновлений безопасности Ubuntu, когда я проверил less /var/log/apt/history.log.

Моя переменная local_infile также была включена, но не показаласьработать.Я исправил проблему с:

mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true)
...