我正在开发一些PHP,根据CSV文件中的数据将目录中的照片重命名为其他内容。 CSV有三列:Number,FirstName和LastName。照片的原始名称是“ FirstName LastName .jpg”。新名称应为“ Number .jpg”。我通过在CSV行中循环来做到这一点,通过将FirstName和LastName放在一起来创建旧名称,通过获取数字并重命名文件来创建新名称。但是,我有两个问题:
第一个是更多的错误,但它可能很重要。当我回显 $ oldname 时,在扩展名之前的名称和点之间存在换行符,即使我已将其指定为一个没有中断的字符串。
第二是它永远不会奏效。它总是返回“DID NOT rename whatever”。我已经更改了文件和包含文件夹的权限,但它仍然无法正常工作。如果你能提供帮助,请提前致谢。
<?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);
?>
答案 0 :(得分:2)
这应该有用。
$oldname = "$dir"."$names[1] $names[2]".".txt";
$newname = "$dir"."$names[0]".".txt";
答案 1 :(得分:0)
$dir
设置正确。在它上面运行is_dir()以确保你已经得到它。$oldname
和$newname
以.txt结尾,但您在说明中将其描述为.jpg。答案 2 :(得分:0)
您获得换行符,因为CSV标准中的换行符等于\ r \ n,而php中的换行符通常等于\ n(如果未设置auto_detect_line_endings指令)。在这种情况下,您在字符串中接收\ r \ n。你必须修剪()(http://php.net/manual/en/function.trim.php)或
preg_replace('/ \ s * /','\',$ line); // space是第二个参数的值
解析了所有数据。 在从文件名中删除特殊字符后,您将能够重命名文件。