[英]MYSQL LOAD DATA INFILE correct file path
我正在嘗試使用 LOAD DATA INFILE 將 CSV 的 zip 文件(從我的數據庫中導出)上傳到 mysql 表中
Mysql 似乎走錯了路:
例如,以下內容:
C:\xampp\htdocs\site/uploads/temp/1620203716052941000/ck_address_change.csv
返回此錯誤:C:\xampp\mysql\data\xampphtdocssite\uploads\temp\1620203716052941000\ck_address_change.csv not found (Errcode: 2 "No such file or directory)
//Get file and create directory
$file = $_FILES['import_zip']['tmp_name'];
$rand = preg_replace('/(0)\.(\d+) (\d+)/', '$3$1$2', microtime()); //random folder name as will be deleted later
mkdir(dirname(__DIR__).'/uploads/temp/'.$rand, 0777);
$path = dirname(__DIR__).'/uploads/temp/'.$rand;
//Open Zip
$zip = new ZipArchive;
$res = $zip->open($file);
if($res === TRUE) {
$zip->extractTo($path);
$zip->close();
}
//Loop files
$files = array_diff(scandir($path), array('.', '..'));
foreach($files as $file){
$table_name = rtrim($file,'.csv');
$upload = $path.'/'.$file;
$q = "LOAD DATA INFILE '".$upload."' INTO TABLE $table_name";
$results = mysqli_query($db,$q) or die(mysqli_error($db));
if(!$results) {
printf("Error message: %s\n", mysqli_error($db));
}
}
//Remove Directory
array_map('unlink', glob("$path/*.*"));
rmdir($path);
如何為此正確設置路徑? 或者這是我本地服務器上的問題?
請注意,這僅用於在我的本地服務器上進行測試,因此沒有安全問題等。
工作代碼 - 用路徑中的反斜杠替換正斜杠。
//Get file and create directory
$file = $_FILES['import_zip']['tmp_name'];
$rand = preg_replace('/(0)\.(\d+) (\d+)/', '$3$1$2', microtime()); //random folder name as will be deleted later
mkdir(dirname(__DIR__).'/files/temp/'.$rand, 0777);
$path = dirname(__DIR__).'/files/temp/'.$rand;
//Open Zip
$zip = new ZipArchive;
$res = $zip->open($file);
if($res === TRUE) {
$zip->extractTo($path);
$zip->close();
}
//Loop files
$files = array_diff(scandir($path), array('.', '..'));
foreach($files as $file){
$table_name = rtrim($file,'.csv');
$upload = $path.'\\'.$file;
$upload = str_replace('/','\\', $upload);
$upload = str_replace('\\', '\\\\', $upload);
$q = "LOAD DATA INFILE '$upload' INTO TABLE $table_name";
$results = mysqli_query($db,$q) or die(mysqli_error($db));
if(!$results) {
printf("Error message: %s\n", mysqli_error($db));
}
}
//Remove Directory
array_map('unlink', glob("$path/*.*"));
rmdir($path);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.