boşluk ile dosyaları yeniden adlandırmak için PHP kullanarak

3 Cevap php

Benim sunucuda zaten adlarında boşluk ile dosya var. Ben çizgi ile bunları yeniden adlandırmak istiyorum. Ben uzayda önce bir çizgi koyarak denedim, ve ben% 20 ile yer değiştirerek denedim. Yine PHP bana verir: Böyle bir dosya ya da dizin. İşte benim kod:

$dir = './';
$dhandle = opendir($dir);
$old_files = array();

if ($dhandle) {
	while (false !== ($fname = readdir($dhandle))) 
	{
		if ( ($fname != '.') && ($fname != '..') ) 
		{
			$old_files[] = (is_dir( "./$fname" )) ? "(Dir) {$fname}" : $fname;
		}
	}
	closedir($dhandle);
}

$new_files = str_replace(' ','_',$old_files);
$x=0;
foreach($old_files as $file)
{ 
	rename(rawurlencode($file),$new_files[$x++]); 
}

3 Cevap

Eğer yeniden adlveırma girişimi yoksa böyle bir dosya hata olmaz emin misiniz? Ayıklama iyi bir ilk adım artık adamcağız kadar sorunu basitleştirmek için.

Ilk ya da çalışma değildi, ama kesinlikle bu işler berbat garantili, yerel bir dosya üzerinde () rawurlencode kullanarak olmamalıdır, çünkü bunu ben söyleyemem. Ayrıca, ben "(Dir) {$ fname}" ile ne yaptığınızı merak ediyorum - aynı zamvea bir hata gibi görünüyor. Ben daha çok ne yapmak istiyorum sanıyorum:

if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" )) 
{
  $old_files[] = $fname;
}

Ayrıca ne dir döner dosya relative to the directory passed olduğunu, ancak, farkına varmalıdır yüzden emin is_dir () yapmak gerekir ve yeniden adlveırma işlemleri almak dikkate. Yani daha söylemek istiyorum muhtemelen daha:

is_dir($dir.'/'.$fname);

ve

rename($dir.'/'.$file,$dir.'/'.$new_files[$x++]);

Bir ekleme:

print "$file\n";

rename deyimi ne alıyoruz görmek için önce.

Ayrıca, size sadece bir boşluk içeren dosya üzerinde işlem yüzden diziye dosyayı eklemeden önce eğer tablosuna bir strstr ($ fname, '') eklemek gerekir:

if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" ) && strstr($fname, ' ')) 
{
  $old_files[] = $fname;
}

Bu eski bir konu olduğunu biliyorum, ama ben gerçekten kötü adlandırılmış dosyaları temizlemek için hızlı kesmek oluşturmak için kullanılır. İşte benim kod isterseniz kullanabilirsiniz, bulunuyor.

<?php

$dir = './';
$dhandle = opendir($dir);
$old_files = array();

if ($dhandle) {
while (false !== ($fname = readdir($dhandle))) {
    if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" ))
         $old_files[] = $fname;
   }
   closedir($dhandle);
}

foreach($old_files as $file)
{
$new_name = str_replace(',', '', str_replace('&', '', str_replace(' ','',$file)));
    rename("./".$file, "./".$new_name);
    echo $new_name."\n";
}