我有一堆随机名称的照片,我想在网上发布,所以他们需要重命名为1.jpg,2.jpg,3.jpg等;
我写了以下代码来实现这个
$i = 1;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname = $path.'/'.$file;
$path_info = pathinfo($oldname);
rename($oldname, $path.'/'.($i).'.'.'jpg');
echo "Old name = <b>".$oldname."</b></br>";
echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>";
$i++;
}
}
closedir($handle);
}
并且魔术发生在运行此脚本后文件夹中有22个文件只有14个图片保留了名称1.jpg,10.jpg到22.jpg当我再次刷新然后只有6个图片剩下名字1。 jpg到6.jpg现在在这一点上,即使经过一次又一次的刷新,它们也没有改变。
我试着评论rename($oldname, $path.'/'.($i).'.'.'jpg');
只是为了看看生成了什么旧的名字和新名字,这些都很好,就像旧名称的新名称生成我想要的1.jpg到22.jpg < / p>
我尝试了几乎相同的代码来将.JPG扩展名更改为.jpg扩展名,因为linux服务器对文件命名区分大小写,而windows不是这段代码一直工作正常;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname = $path.'/'.$file;
$path_info = pathinfo($oldname);
echo $sub= substr($file,0,-4);
echo "<br>";
rename($oldname, $path.'/'.($sub).'.'.'jpg');
}
}
closedir($handle);
}
早上2点40分在印度,我只是个学生,这个问题不让我进入睡眠模式,请帮助我。
答案 0 :(得分:0)
在循环重新思考()后,我明白了为什么这段代码没有用,为什么它适用于扩展重命名。
重命名功能将2个参数作为文件的旧名称和带有位置的新名称,它也可以移动文件,如果在新位置或相同位置已存在同名文件,则只会覆盖它并且不会有任何错误。
要理解这一点,举一个例子,摄影文件夹中有22个图像,从1.jpg到22.jpg,但随机顺序如1.jpg,10.jpg,15.jpg等。
然后这个代码将采用1.jpg并将其重命名为1.jpg到目前为止这么好但是下次循环它将需要10.jpg(这是文件夹中的第二个文件)并将其重命名为2.jpg确定这是代码所期望的,但是暂停一下,已经存在一个名为2.jpg的文件,它只是被代码覆盖而没有任何错误,从而导致数据丢失。
现在你要说明为什么hack图像像1.jpg,10.jpg那样排列,如果存在2.jpg而不是为什么它们不被命名为1.jpg和2.jpg? 答案很简单,有些图片有.jpg,有些.JPG图片有.JPG优先。
要克服这个问题,你需要做大多数软件所做的事情。 WinRAR你需要一个临时文件夹来移动你的文件,然后再将文件移动到源文件夹,代码就像下面这样。
String[] cmdarray = {"rsync",
"-avrz",
"--timeout=100",
"rsync://10.149.21.211:8730/logflow/click/file1 logfile/click/file2",
// separated argument contains space but not single (or other) quote
"/home/kerrycai/puller" };
... Runtime.getRuntime.exec(cmdarray); ...
并且感谢大家因为你而没有帮助我,因为我自己做了。