2011-02-25 53 views
0

我正在致力於將一個目錄中的照片重命名爲其他基於CSV文件的數據。該CSV有三列:號碼,名字和姓氏。照片的原始名稱是「名字姓氏.jpg」。新名稱應該是「號碼.jpg」。我通過循環遍歷CSV的行,通過將FirstName和LastName放在一起創建舊名稱,通過獲取數字並重命名文件來創建新名稱。然而,我有兩個問題:從CSV重命名PHP文件

第一個是更多的錯誤,但它可能是重要的。當我回顯$ oldname時,擴展名之前的名稱和點之間有一個換行符,儘管我已將它指定爲一個沒有中斷的字符串。

其次是它從來沒有工作。它總是返回「不重命名」。我已經更改了文件的權限幷包含文件夾,但仍然無效。如果你能提供幫助,請提前致謝。

<?php 
$dir = "*Dir to phptos*"; 
$csv = fopen("filename.csv", "r") or die("no csv file"); 
//$ext = ".txt"; 

while(!feof($csv)) { 
$line = fgets($csv); 
$names = explode(",", $line); 

//echo $names[2]; 

$oldname = $dir.$names[1]." ".$names[2].".txt"; 
$newname = $dir.$names[0].".txt"; 

if (is_file($oldname)) { 
rename($oldname, $newname); 

echo "renamed '".$oldname."' to '".$newname."'<br/>"; 
} else { 
echo "DID NOT rename '".$oldname."'<br/>\n"; 
//echo "$oldname"; 
} 
} 

fclose($csv); 
?> 

回答

1

這應該有效。

$oldname = "$dir"."$names[1] $names[2]".".txt"; 
$newname = "$dir"."$names[0]".".txt"; 
0
  1. 確保$dir設置正確。運行is_dir()以確保你已經擁有它。
  2. 在您的代碼中,$oldname$newname以.txt結尾,但在描述中將它們描述爲.jpg。
  3. 嘗試clearing your stat cache在腳本的開頭。
+0

我的歉意,改變了腳本以處理.txt文件,並忘記將其改回。 – cortices 2011-02-25 06:53:13

0
  1. 你必須有$ DIR跟着一起目錄分隔符(/或\)。
  2. 由於CSV標準中的換行符等於\ r \ n,而php中的換行符通常等於\ n(如果auto_detect_line_endings指令未設置),您將獲得換行符。在這種情況下,您正在接收字符串中的\ r。你必須修剪()(http://php.net/manual/en/function.trim.php)或

    preg_replace('/ \ s * /','\',$ line); //空格是第二個參數的值

所有數據都被解析。 從文件名中刪除特殊字符後,您將可以重命名文件。