2011-02-25 148 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); //空格是第二个参数的值

所有数据都被解析。 从文件名中删除特殊字符后,您将可以重命名文件。