source

php / mariadb 업데이트 후 데이터 로컬 파일 로드 금지

bestscript 2022. 12. 3. 12:45

php / mariadb 업데이트 후 데이터 로컬 파일 로드 금지

이전에도 문의한 적이 있지만 도움이 될 만한 새로운 게시물을 찾을 수 없었습니다.LOAD DATA LOCAL INFILE은 오늘까지 완벽하게 작동하고 있습니다.PHP와 (잘 모르겠지만) MariaDB의 업데이트를 실행한 것 외에는 변경하지 않았습니다.현재 PHP 7.2.17MariaDB 10.1.38을 실행하고 있습니다.

다음 오류가 표시됩니다.경고: mysqli::query():LOAD DATA LOCAL INFILE 금지

검색 결과: - db 사용자는 모든 권한을 가지고 있으며 루트 사용자도 이 오류를 받습니다. - my.cnf에서 local-infile=1 엔트리를 확인했습니다.

load 문은 mysql 명령줄에서는 정상적으로 동작하지만 PHP 스크립트에서는 동작하지 않습니다.

Import를 실행하는 방법은 다음과 같습니다.

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 VARIULES를 실행했을 때, 이것이 동작하도록 되어 있는 것을 알 수 있습니까?

local_infile ON

관심 있는 사람을 위해서 해결했어요.이 글을 읽었는데

PHP 업그레이드로 인해 내 php.ini가 변경된 것 같습니다.설정을 유지하거나 덮어쓰는 방법에 대해 몇 가지 질문이 있는 것 같습니다.내가 거기에 정답을 맞혔는지 모르겠어!

이것은 cron 작업이기 때문에 여기서 php.ini를 수정해야 했습니다.

/etc/syslog/7.2/cli/syslog.ini

이 행의 코멘트를 해제하거나 변경합니다.

mysqli.allow_local_infile = 온

각 디렉토리 /etc/php/7.2 -> /fpm/apache에서 php-fpm을 실행하고 있는 경우 php.ini에 대해서도 같은 처리를 합니다.

잠에서 깨어난 지 얼마 안 돼 앱 중 하나가 php7.2와 mysqli를 사용하여 똑같은 작업을 하고 있다.

확인해보니 Ubuntu 자동 보안 업데이트의 일부로 어젯밤 php7.2가 업그레이드된 것 같습니다.less /var/log/apt/history.log.

나의local_infile변수도 켜져 있었지만 작동하지 않는 것 같습니다.문제를 해결했습니다.

mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true)

언급URL : https://stackoverflow.com/questions/55818568/load-data-local-infile-forbidden-after-php-mariadb-update