У меня есть сценарий PHP, куда я загружаю файл CSV, и это обновление / вставка строк в базу данных mysql, все на сервере ubuntu 18.04, и этот сценарий PHP много лет работал без проблем, сервер работал более 1 года внезапно, пару недель назад, при каких-либо изменениях на сервере или программном обеспечении перестало работать.
Странно то, что он не генерирует никаких ошибок, нет ошибок в журналах, ничего, поэтому я не могу отладить.
Несколько дней назад я много читал без удачи, поэтому я не уверен, что делать.
На моих тестах и подобных тестах я обнаружил следующее:
- Если я запускаю «Загрузить данные локального файла» непосредственно на сервере, это работает
- Файл загружается нормально, я могу дать разрешение 777 и ничего не меняется
- infile включен на mysql
- apparmor настроен
- пользователь, который подключается к базе данных, имеет ФАЙЛ на привилегиях
Вот используемый код:
LOAD DATA LOCAL INFILE '/path/to/temp/file' INTO TABLE pagos_nuevos CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(cuenta, @pago, @fpago) SET pago = CAST(REPLACE(REPLACE(@pago,',',''),'$','') AS DECIMAL(10,2)), fpago = STR_TO_DATE(@fpago, '%d/%m/%Y')
Как я сказал в начале, это не новый сервер, это не новый код, он работает уже много лет, когда при отладке я получил это только на экране:
Query: LOAD DATA LOCAL INFILE '/path/to/temp/file' INTO TABLE pagos_nuevos CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(cuenta, @pago, @fpago) SET pago = CAST(REPLACE(REPLACE(@pago,',',''),'$','') AS DECIMAL(10,2)), fpago = STR_TO_DATE(@fpago, '%d/%m/%Y') failed
0:
Где "0:", это должен быть код ошибки, а после ":" описание ошибки.
Если я удаляю LOCAL, я получаю эту ошибку:
Query: LOAD DATA LOCAL INFILE '/path/to/temp/file' INTO TABLE pagos_nuevos CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(cuenta, @pago, @fpago) SET pago = CAST(REPLACE(REPLACE(@pago,',',''),'$','') AS DECIMAL(10,2)), fpago = STR_TO_DATE(@fpago, '%d/%m/%Y')
not found (Errcode: 13 - Permission denied)
29: Файл '/ var / www / html / testing / unicomer / pagos / datos / pagos / pagos al 29.csv' не найден (код ошибки: 13 - В доступе отказано)
Я провел тест с пользователем со всеми привилегиями и не работает, поэтому не знаю, является ли это проблемой mysql или проблемой с сервером.
Большое спасибо за вашу помощь.