【发布时间】:2016-06-17 10:13:32
【问题描述】:
我有一堆随机名称的照片,我想将它们发布到网上,因此需要将它们重命名为 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');just 以查看生成了哪些旧名称和新名称,这些都很好,就像旧名称是新名称一样,生成了我想要的 1.jpg 到 22.jpg
我尝试了几乎相同的代码将 .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,我只是一名学生,这个问题不让我进入睡眠模式,请帮助我。
【问题讨论】:
-
我赌的是路径问题。打印出完整路径,检查权限...
-
有像
1.jpg到22.jpg这样的原始名称吗?如果是,那么当您尝试将其他文件之一重命名为相同名称时,您将删除这些文件。 -
你检查过 php_errors.log 吗?
-
不,我在本地工作,我已打开显示错误,我可以看到所有其他错误 bt 以供参考,我正在粘贴错误日志以防万一 [Thu Mar 03 21:38:54.867100 2016 ] [ssl:warn] [pid 4512:tid 260] AH01909: www.example.com:443:0 服务器证书不包含与服务器名称匹配的 ID [Thu Mar 03 21:38:55.010100 2016] [mpm_winnt:通知] [pid 4512:tid 260] AH00354: Child: 启动 150 个工作线程。 [Thu Mar 03 23:15:19.182000 2016] [authz_core:error] [pid 4512:tid 1628] [client fe80::15db:ddeb:c395:4eee:50562] AH01630:客户端被服务器配置拒绝:C
-
是的,我原来的名字在很多文件上都有1.jpg之类的名字是这个原因吗?
标签: php file upload rename move