2013-11-08 1 views
0

У меня есть следующая функция в PHP, которая отлично работает, за исключением файлов с пробелами в их именах (например, Good picture.jpg). Вот он:Escape spaces в glob() в PHP?

function getphotolist($currentalbum) { 
    $photos = glob($currentalbum.'/*.[Jj][Pp][Gg]'); 
    $albumparts = explode('_', $currentalbum); 
    switch (array_key_exists(2,$albumparts)) { 
     case false: 
      usort($photos,"cmpexiftime"); 
      break; 
     case true: 
      usort($photos,"cmpexiftimer"); 
      break; 
    } 
    $photolist = ""; 
    foreach($photos as $photo){ 
     $phototitle = explode('_',basename($photo,".jpg")); 
     $title = $phototitle[0]; 
     $thumb = $currentalbum.'/thumbs/'.basename($photo,".jpg").'_thumb.jpg'; 
     $exif = read_exif_data_raw("$photo",0); 
     $desc = $exif["IFD0"]["ImageDescription"]; 
     $camera = ucwords(strtolower($exif["IFD0"]["Model"])); 
     switch($exif["SubIFD"]["LensInfo"]) { 
      case "105.0 mm f/2.8": 
       $lens = "AF-S Micro-Nikkor 105mm ƒ/2.8 VR"; 
       break; 
      case "50.0 mm f/1.8": 
       if ($camera=="Nikon D700") { 
        $lens = "AF-S Nikkor 50mm ƒ/1.8 G"; 
       } else { 
        $lens = "AF Nikkor 50mm ƒ/1.8 D"; 
       } 
       break; 
      case "18.0-55.0 mm f/3.5-5.6": 
       $lens = "AF-S Nikkor 18-55mm ƒ/3.5-5.6 II"; 
       break; 
      default: 
       $lens = $exif["SubIFD"]["LensInfo"]; 
       break; 
     } 
     $length = str_replace(" ","",$exif["SubIFD"]["FocalLength"]); 
     $shutter = str_replace(" ","",str_replace("ec","",$exif["SubIFD"]["ShutterSpeedValue"])); 
     $aperture = str_replace("f","ƒ",$exif["SubIFD"]["ApertureValue"]); 
     $iso = $exif["SubIFD"]["ISOSpeedRatings"]; 
     list($width,$height) = getimagesize($photo); 
     if ($height==1080 && $width==1920) { 
      $photolist .= '<span data-title="'.$title.'" data-thumb="'.$thumb.'" data-desc="'.$desc.'" data-camera="'.$camera.'" data-lens="'.$lens.'" data-length="'.$length.'" data-shutter="'.$shutter.'" data-aperture="'.$aperture.'" data-iso="'.$iso.'" style="background-image:url('.$photo.'); background-size:cover;" class="slide"></span>'; 
     } elseif ($height >= $width) {        
      $photolist .= '<span data-title="'.$title.'" data-thumb="'.$thumb.'" data-desc="'.$desc.'" data-camera="'.$camera.'" data-lens="'.$lens.'" data-length="'.$length.'" data-shutter="'.$shutter.'" data-aperture="'.$aperture.'" data-iso="'.$iso.'" style="background-image:url('.$photo.'); background-size:contain;" class="slide"></span>'; 
     } else { 
      $photolist .= '<span data-title="'.$title.'" data-thumb="'.$thumb.'" data-desc="'.$desc.'" data-camera="'.$camera.'" data-lens="'.$lens.'" data-length="'.$length.'" data-shutter="'.$shutter.'" data-aperture="'.$aperture.'" data-iso="'.$iso.'" style="background-image:url('.$photo.'); background-size:contain;" class="slide"></span>'; 
     } 
    } 
return $photolist; 
} 

Может кто-нибудь предложить, как исправить это, чтобы работать с файлами с пробелами? Благодаря!

+0

Если вы спрашиваете, как-то исправить это вообще полезно, чтобы сказать нам, как это работает. – Sammitch

+0

@Sammitch Извините, в основном, похоже, что он просто не пропускает переменную '$ photo', поэтому я заканчиваю с' 'всем, кроме указателя' background-image'. – NaOH

ответ

3

Как пояснил here, попробуйте использовать этот код, чтобы избежать пространства в имени файла при использовании Glob:

$albumEscaped = str_replace(' ', '\ ', $currentalbum); 
$photos = glob($albumEscaped .'/*.[Jj][Pp][Gg]'); 
+0

Использовал ваш ответ немного по-другому и решил проблему. Огромное спасибо! – NaOH