php批量重新命名檔案
阿新 • • 發佈:2019-01-23
<?php /** * 1) 通過讀取csv文件(product_all.csv)中的產品編號獲取目錄1和目錄2下圖片對應編號的目錄 * (目錄1下圖片路徑:../imagezoom/id_1/image_xxx.jpg, * 目錄2下圖片路徑:../show/id_1/image_xxx.jpg),並將目錄1和目錄2下對應產品編號的資料夾 * 重新命名為重新生成的編號,同時將獲取到的資料和修改的資料匯入新的csv文件(new.csv)中 * 2) 通過讀取資料庫中的 productimage 表 將資料中產品編號按①中修改後匯入到 * 新的csv檔案(image_processed.csv)中 */ //要把字元轉換成utf-8編碼,首先當前頁面也必須是utf-8的編碼,否則會報錯 $directory_1 = 'D:/資料/images/test/imagezoom'; //目錄1 $directory_2 = 'D:/資料/images/test/show'; //目錄2 $handlefile_0 = 'D:/資料/images/test/product_all.csv'; //商品資料 $handlefile_1 = 'D:/資料/images/test/new.csv'; //用來接收重新編號過的商品資料 $file_0=fopen(iconv('UTF-8','gbk',$handlefile_0),'r'); $file_1 = fopen(iconv('UTF-8','gbk',$handlefile_1),'w'); require('../php_connect_test/connect_test.php'); //資料庫連線 $handlefile_image = 'D:/資料/images/test/image.csv'; //用來讀取表頭的檔案 全部內容:proImageId,piProductId,image,imageType (只有一行資料,這行程式碼可有可無) $file_image = fopen(iconv('UTF-8','gbk',$handlefile_image),'r'); $handlefile_image_processed = 'D:/資料/images/test/image_processed.csv'; //接收 productimage 表處理後資料 $file_image_processed = fopen(iconv('UTF-8','gbk',$handlefile_image_processed),'w'); $listline = 0; while(!feof($file_0)){ $data = fgetcsv($file_0); if($data){ $suk = 10000 + $listline; $result = mysqli_query($conn,'SELECT * from productimage pi where piProductId='.$data[0]); //查詢 if(intval($listline)>0){ while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)){ $row['piProductId']=$suk; //print_r($row); fputcsv($file_image_processed,$row); } $imagezoom_dir = $directory_1.'/'.$data[0]; $show_dir = $directory_2.'/'.$data[0]; $new0_dir = $directory_1.'/'.$suk; $new1_dir = $directory_2.'/'.$suk; if(!file_exists(iconv("utf-8", "gbk", $new0_dir))){ rename(iconv("utf-8", "gbk", $imagezoom_dir),iconv("utf-8", "gbk", $new0_dir)); rename(iconv("utf-8", "gbk", $show_dir),iconv("utf-8", "gbk", $new1_dir)); } $data[0] = $suk; $headImage = explode('/',substr($data[10],strlen('/productImg/show/'))); // 路徑:/productImg/show/ 為 product_all.csv 中第11列的部分欄位 格式如:/productImg/show/10913655629/587c7f2cNd6376666.jpg,該行程式碼通過 "/" 分割除 "/productImg/show/" 外的欄位為陣列 $headImage[0] = $data[0]; // 將重新編號後的產品編號傳給$headImage 用於重新定義 product_all.csv 中的第11個欄位 $data[10] = '/productImg/show/'.implode('/',$headImage); }else{ fputcsv($file_image_processed,fgetcsv($file_image)); } print_r($data[0]); fputcsv($file_1,$data); } print_r('<br>'); $listline++; } fclose($file_1); fclose($file_0);