簡體   English   中英

MYSQL LOAD DATA INFILE 正確的文件路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM