2014-09-12 156 views
0

我有这样的脚本:只显示图片

$uploadsDirectory = dirname($_SERVER['SCRIPT_FILENAME']) .'/slides/head/'; 
if ($handle = opendir($uploadsDirectory)) { 
    $uplo = array(); 
while (false !== ($file = readdir($handle))) { 
    array_push($uplo, $file);} 
    sort($uplo,SORT_NATURAL | SORT_FLAG_CASE); 
    $user = array(); 
foreach($uplo as $fname) { 
if($fname != ".." && $fname != "."){ 
if(substr($fname,0,1) != "_") 
    echo "<div class='bgitem' id='head'>$fname</div>"; 
else 
    array_push($user, "$fname");}} 
    closedir($handle);} 

它工作正常,但我怎样才能使它所以只显示图片? (我有没有其他的照片文件,因此它会显示一个破碎的图片来代替。)

+0

为什么不把过滤器阵列可以接受的扩展? – Rasclatt 2014-09-12 16:57:19

+3

'if($ fname是图片){显示它}' – 2014-09-12 16:57:21

回答

0

解决方案为您提供:

$extension = explode(".", $fname); 
$extension = (isset($extension) && count($extension) > 0)?strtolower($extension[count($extension) -1]):null; 

if(in_array($extension, ['jpg', 'jpeg', 'png', 'gif'])){ 
    //Show the image 

}else{ 
    //dont show image 
} 
0

一个简单的办法是把它测试文件是否是一个图像在同一行中测试文件是父目录还是当前目录(if($fname != ".." && $fname != "."){

您可以使用getimagesize()来确定文件是否为任何类型的图像。如果它不是图像,它将返回零。

$uploadsDirectory = dirname($_SERVER['SCRIPT_FILENAME']) .'/slides/head/'; 
if ($handle = opendir($uploadsDirectory)) { 
    $uplo = array(); 
while (false !== ($file = readdir($handle))) { 
    array_push($uplo, $file);} 
    sort($uplo,SORT_NATURAL | SORT_FLAG_CASE); 
    $user = array(); 
foreach($uplo as $fname) { 
if($fname != ".." && $fname != "." && getimagesize($fname) != 0){ //Tests if file is an iamge 
if(substr($fname,0,1) != "_") 
    echo "<div class='bgitem' id='head'>$fname</div>"; 
else 
    array_push($user, "$fname");}} 
    closedir($handle);}