【问题标题】:PHP rename files from CSVPHP 从 CSV 重命名文件
【发布时间】:2011-07-04 02:43:09
【问题描述】:

我正在开发一些 PHP,以根据 CSV 文件中的数据将目录中的照片重命名为其他名称。 CSV 包含三列:Number、FirstName 和 LastName。照片的原始名称是“FirstName LastName.jpg”。新名称应为“Number.jpg”。我通过循环浏览 CSV 的行来做到这一点,通过将 FirstName 和 LastName 放在一起来制作旧名称,通过获取数字和重命名文件来制作新名称。但是,我有两个问题:

第一个更多是一个错误,但它可能很重要。当我回显 $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);
?>

【问题讨论】:

    标签: php string rename


    【解决方案1】:
    1. 您必须在 $dir 后面加上目录分隔符( / 或 \ )。
    2. 您得到换行符是因为 CSV 标准中的换行符等于 \r\n 而 php 中的换行符通常等于 \n(如果未设置 auto_detect_line_endings 指令)。在这种情况下,您会在字符串中收到 \r 。你必须 trim() (http://php.net/manual/en/function.trim.php) 或

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

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

    【讨论】:

      【解决方案2】:

      这应该可行。

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

      【讨论】:

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

        【讨论】:

        • 抱歉,已更改脚本以处理 .txt 文件,但忘记将其改回。
        猜你喜欢
        • 2017-10-16
        • 1970-01-01
        • 2014-09-09
        • 2014-01-20
        • 1970-01-01
        • 2020-04-11
        • 2019-01-05
        • 1970-01-01
        • 2014-06-01
        相关资源
        最近更新 更多