PHP从CSV重命名文件

时间:2011-02-25 06:28:43

标签: php string rename

我正在开发一些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);
?>

3 个答案:

答案 0 :(得分:2)

这应该有用。

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

答案 1 :(得分:0)

  1. 确保$dir设置正确。在它上面运行is_dir()以确保你已经得到它。
  2. 在您的代码中,$oldname$newname以.txt结尾,但您在说明中将其描述为.jpg。
  3. 在脚本开头尝试clearing your stat cache

答案 2 :(得分:0)

  1. 您必须在$ dir后跟目录分隔符(/或\)。
  2. 您获得换行符,因为CSV标准中的换行符等于\ r \ n,而php中的换行符通常等于\ n(如果未设置auto_detect_line_endings指令)。在这种情况下,您在字符串中接收\ r \ n。你必须修剪()(http://php.net/manual/en/function.trim.php)或

    preg_replace('/ \ s * /','\',$ line); // space是第二个参数的值

  3. 解析了所有数据。 在从文件名中删除特殊字符后,您将能够重命名文件。