2010-09-17 23 views
11

我有下面的代碼列出文件夾中的所有圖像,問題是它發現一些文件(a。和a ..),我不確定他們是什麼所以我不確定如何防止他們出現。我在一個Windows XP機器,任何幫助將是偉大的,謝謝。使用PHP列出目錄中的所有圖像

錯誤:警告:C無誤差 :重命名(圖像/,圖像/。)[function.rename] \瓦帕\ WWW \測試\ listPhotosA.php線14上

警告:重命名(圖像/ ..,圖像/ ..)[function.rename]:在 C無誤差:\瓦帕\ WWW \測試\ listPhotosA.php線14上

代碼:

<?php 
define('IMAGEPATH', 'images/'); 

if (is_dir(IMAGEPATH)){ 
    $handle = opendir(IMAGEPATH); 
} 
else{ 
    echo 'No image directory'; 
} 

$directoryfiles = array(); 
while (($file = readdir($handle)) !== false) { 
    $newfile = str_replace(' ', '_', $file); 
    rename(IMAGEPATH . $file, IMAGEPATH . $newfile); 
    $directoryfiles[] = $newfile; 
} 

foreach($directoryfiles as $directoryfile){ 
    if(strlen($directoryfile) > 3){ 
    echo '<img src="' . IMAGEPATH . $directoryfile . '" alt="' . $directoryfile . '" /> <br>'; 
    } 
} 

closedir($handle); ?> 

回答

19

我喜歡PHP的glob函數。

foreach(glob(IMAGEPATH.'*') as $filename){ 
    echo basename($filename) . "\n"; 
} 
+0

好看不知道 – balupton 2010-09-17 19:35:47

+0

太好了!我沒有意識到PHP有一個glob,這很好。我仍然不知道什麼。那是opendir發現的。有任何想法嗎?我只是好奇未來 – Drewdin 2010-09-17 19:44:34

+1

'。'是當前目錄,'..'是父目錄。我不知道opendir爲什麼要顯示它們。 – 2010-09-17 19:48:42

-1
while (($file = readdir($handle)) !== false) { 
    if (
     ($file == '.')|| 
     ($file == '..') 
    ) { 
     continue; 
    } 
    $newfile = str_replace(' ', '_', $file); 
    rename(IMAGEPATH . $file, IMAGEPATH . $newfile); 
    $directoryfiles[] = $newfile; 
} 
4

使用glob函數。

<?php 
define('IMAGEPATH', 'images/'); 
foreach(glob(IMAGEPATH.'*') as $filename){ 
    $imag[] = basename($filename); 
} 
print_r($imag); 
?> 

你有數組形式的所有圖像

+0

'帶有括號的圖像路徑? – jscripter 2015-06-21 19:26:21

1

要獲得一個文件夾內的所有顯示目錄及子目錄所有JPG圖片:

function getAllDirs($directory, $directory_seperator) 
{ 

$dirs = array_map(function ($item) use ($directory_seperator) { 
    return $item . $directory_seperator; 
}, array_filter(glob($directory . '*'), 'is_dir')); 

foreach ($dirs AS $dir) { 
    $dirs = array_merge($dirs, getAllDirs($dir, $directory_seperator)); 
} 
return $dirs; 
} 



function getAllImgs($directory) 
{ 
    $resizedFilePath = array(); 
    foreach ($directory AS $dir) { 

    foreach (glob($dir . '*.jpg') as $filename) { 

     array_push($resizedFilePath, $filename); 

    } 

} 
    return $resizedFilePath; 
} 


$directory = "C:/xampp/htdocs/images/"; 
$directory_seperator = "/"; 

$$allimages = getAllImgs(getAllDirs($directory, $directory_seperator)); 
0

請使用下面的代碼從文件夾中讀取的圖像。

function readDataFromImageFolder() { 

$imageFolderName = 14; 
$base = dirname(__FILE__); 
$dirname = $base.DS.'images'.DS.$imageFolderName.DS; 
$files = array(); 

if (!file_exists($dirname)) { 
    echo "The directory $dirname not exists.".PHP_EOL; 
    exit; 
} else { 
    echo "The directory $dirname exists.".PHP_EOL; 
    $dh = opendir($dirname); 

    while (false !== ($filename = readdir($dh))) { 
     if ($filename === '.' || $filename === '..') continue; 
     $files[] = $dirname.$filename; 
    } 
    uploadImages($files); 
} 
} 

請點擊此處查看詳細說明。 http://www.pearlbells.co.uk/code-snippets/read-images-folder-php/

5

glob()是大小寫敏感的通配符*將返回所有文件,所以我在這裏指定的擴展,這樣你就不必做過濾工作

$d = 'path/to/images/'; 
foreach(glob($d.'*.{jpg,JPG,jpeg,JPEG,png,PNG}',GLOB_BRACE) as $file){ 
    $imag[] = basename($file); 
} 
相關問題