Я пытаюсь импортировать файл .csv в базу данных MySQL, используя HTML / PHP. Код является:
HTML
<form method="post" action="" enctype="multipart/form-data">
File: <input type="file" name="csv">
<input type="submit" value="Send" name="subCSV">
</form>
PHP
$file = $_FILES["csv"]["tmp_name"];
try {
$query = $connexion -> prepare("LOAD DATA INFILE ? into TABLE myTable FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\r\\n' IGNORE 1 ROWS");
$query->bindValue(1, $file, PDO::PARAM_STR);
$query->execute();
} catch(PDOException $e) { echo $e->getMessage(); $errorCode = $e->getCode();
Но я получаю эту ошибку:
File '/tmp/phpl8eY59' not found (Errcode: 13)
Указание файла явно работает. Разрешения в порядке, пользователь, использующий Apache, и владелец файла идентичны. Я предоставил разрешение на файл пользователю базы данных.
Очевидно, что настройка AppArmor решит проблему, но я ее не использую, так как она не установлена на моем сервере.
Вы можете попробовать использовать «LOAD DATA LOCAL INFILE». Смотрите, например, ответ здесь: ЗАГРУЗКА ДАННЫХ INFILE не работает. Проблема в том, что, похоже, существуют различные причины этой проблемы.
Я решил проблему с этим:
chmod($file, 0644);
Пользователь Apache / PHP и пользователь MySQL не были одинаковыми.