2010-09-17 8 views
11

Tôi có mã bên dưới liệt kê tất cả hình ảnh trong một thư mục, vấn đề là nó tìm thấy một số tệp (a. Và a ..) mà tôi không chắc chắn vì vậy tôi không chắc chắn cách ngăn chúng hiển thị. Tôi đang sử dụng máy tính windows XP, mọi trợ giúp đều tuyệt vời, cảm ơn.Liệt kê tất cả hình ảnh trong thư mục bằng cách sử dụng PHP

Lỗi: Cảnh báo: đổi tên (images /, images /..) [Function.rename]: Không có lỗi trong C: \ wamp \ www \ Testing \ listPhotosA.php trên đường dây 14

Cảnh báo : đổi tên (images/.., images/..) [function.rename]: Không có lỗi trong C: \ wamp \ www \ Testing \ listPhotosA.php trên đường dây 14

Code:

<?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); ?> 

Trả lời

19

Tôi thích hàm glob của PHP.

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

đẹp không biết rằng – balupton

+0

Tuyệt vời! tôi đã không nhận ra PHP đã có một glob, mà làm việc tuyệt vời. Tôi vẫn không biết những gì. và .. là opendir đang tìm kiếm. BẤT K ideas ý tưởng nào? Tôi chỉ tò mò về tương lai – Drewdin

+1

'.' là thư mục hiện tại và '..' là thư mục mẹ. Tôi không biết tại sao opendir lại cho họ xem. –

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

Sử dụng chức năng scan_dir balphp của: http://github.com/balupton/balphp/blob/master/trunk/lib/core/functions/_scan_dir.funcs.php

scan_dir($dirPath, array('pattern'=>'image'));

sẽ trả về một mảng của tất cả các file đó là những hình ảnh trong đó đường dẫn và tất cả các thư mục con, sử dụng một cấu trúc $path => $filename. Để tắt quét các thư mục phụ, hãy đặt tùy chọn recurse thành false

4

Sử dụng hàm glob.

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

Bạn có tất cả hình ảnh trong định dạng mảng

+0

. với đường dẫn hình bằng dấu ngoặc vuông? – jscripter

1

Để có được tất cả hình ảnh jpg trong tất cả dirs và subdirs bên trong một thư mục:

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

Vui lòng sử dụng đoạn mã sau để đọc hình ảnh từ thư mục .

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); 
} 
} 

Vui lòng nhấp vào đây để xem giải thích chi tiết. http://www.pearlbells.co.uk/code-snippets/read-images-folder-php/

5

glob() là trường hợp nhạy cảm và các ký tự đại diện * sẽ trở lại tất cả các file, vì vậy tôi đã chỉ định phần mở rộng ở đây, do đó bạn không cần phải làm công việc lọc

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