2010-03-27 42 views
1

我有這樣的代碼到目前爲止它完美,但依賴於有被替代的目錄:檢查目錄是否存在,如果它不選擇一個圖像

$path = '/home/sites/therealbeercompany.co.uk/public_html/public/themes/trbc/images/backgrounds/'.$this->slug; 
$bgimagearray = array(); 
$iterator = new DirectoryIterator($path); 
foreach ($iterator as $fileinfo) { 
    if ($fileinfo->isFile() && !preg_match('\.jpg$/', $fileinfo->getFilename())) { 
     $bgimagearray[] = "'" . $fileinfo->getFilename() . "'"; 
    } 
} 

我需要在頂部,所以在有些工作如果目錄不存在,它默認爲位於後臺目錄根目錄的圖像...

任何幫助,將不勝感激。

回答

2

你想要is_dir。測試你的slug目錄,如果它不存在,請改用根目錄。

+0

謝謝你的幫助 – Andy 2010-03-27 16:42:25

+0

is_dir在什麼都沒有的情況下工作嗎? – Powertieke 2010-03-27 16:49:38

0

您也可以使用file_exists函數來檢查目錄。看到

+0

是的,但它會提供一個假陽性,如果有一個同名的文件存在 – Powertieke 2010-03-27 17:11:14

0

使用is_dir如果Dir是存在的,如果不是,設置$路徑到當前路徑(其中腳本運行)

if (!is_dir($path)) { 
    $path = $_SERVER["PATH_TRANSLATED"]; 
} 

我非常危險的假設$路徑不要在其他地方使用:)

(is_dir是更好的,謝謝!)

+0

感謝您的信息! – Andy 2010-03-27 16:49:32

0

DirectoryIterator將拋出UnexpectedValueException當路徑無法打開,所以你可以用該呼叫轉變爲try/catch塊,然後回退到日e根路徑。在功能:

function getBackgroundImages($path, $rootPath = NULL) 
{ 
    $bgImages = array(); 
    try { 
     $iterator = new DirectoryIterator($path); 
     // foreach code 
    } catch(UnexpectedValueException $e) { 
     if($rootPath === NULL) {     
      throw $e; 
     } 
     $bgImages = getBackgroundImages($rootPath); 
    } 
    return $bgImages; 
} 

當然file_existsis_dir的,但一個有效的選項了。

相關問題