我现在有一个脚本,非常适合我公司资源的FTP类型站点。
显示带有下载链接和文件名的图像。我想做的是,如果文件不是图像(如pdf)显示占位符图像。
下面的代码是不正确的(if/else语句),但你可以看到我的目的。
提前感谢。
<?php
// Find all files in that folder
$files = glob('files/*');
//$image =
// Do a natural case insensitive sort, usually 1.jpg and 10.jpg would come next to each other with a regular sort
natcasesort($files);
if ($files = array("gif", "jpeg", "jpg", "png");) {
$images = $file
} else {
$images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
}
// Display images
foreach($files as $file) {
echo '<div class="one_half"><img src="' . $images . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
}
?>
这里有几个问题。
-
小心你的比较运算符-你目前正在重新分配$files数组在这一行:
if ($files = array("gif", "jpeg", "jpg", "png");) {
-
您正在以无意义的方式将
$files
数组与另一个数组进行比较。您可能会构建一个单独的$images数组,就像您正在尝试做的那样,但这在foreach循环中完成会更好,如:foreach($files as $file) { $filepath = pathinfo($file); if (in_array($filepath['extension'], ('gif', 'jpeg', 'jpg', 'png')) { $image = $file; } else { $image = 'http://hg.exbabylon.net/find_fitter/placeholder.jpg'; } echo '<div class="one_half"><img src="' . $images . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>'; }
-
理想情况下,您应该查看mime类型而不是文件扩展名。在PHP 5.3中,这样做:
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension $mimetype = finfo_file($finfo, $file); finfo_close($finfo);
然后您可以根据mime类型进行比较,如(2)所示。
$allowed_extensions = array("gif", "jpeg", "jpg", "png");
$files = glob('files/*');
natcasesort($files);
foreach($files as $file){
if(!in_array(end(explode(".",$file)),$allowed_extensions)){
$image = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
}else{
$image = $file;
}
echo '<div class="one_half"><img src="' . $image . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
}
<?php
$allowed_extensions = array("gif", "jpeg", "jpg", "png");
// use values as keys for lasier lookups
$allowed_extensions = array_combine($allowed_extensions, $allowed_extensions);
// Find all files in that folder
$files = glob('files/*');
// Do a natural case insensitive sort, usually 1.jpg and 10.jpg would come next to each other with a regular sort
natcasesort($files);
// Display images
foreach($files as $file) {
// split file name at "." and use last part as file extension
$file_parts = explode('.', $file);
$file_extension = array_pop($file_parts)
// check if file extensions is allowed
if($allowed_extensions[$file_extension]) {
$images = $file;
} else {
$images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
}
echo '<div class="one_half"><img src="' . $images . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
}
?>
假设您的$files仅保存文件名+扩展名,即myimage.png
foreach($files as $file) {
$split = explode(".", $file);
$extension = array_pop($split);
if (in_array($extension, array('gif', 'jpeg', 'jpg', 'png'))) {
$images = $file;
} else {
$images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
}
//display your image
echo '<div ...';
}
把它改成这样
<?php
// Find all files in that folder
$files = glob('files/*');
// Do a natural case insensitive sort, usually 1.jpg and 10.jpg would come next to each other with a regular sort
natcasesort($files);
$extensions = array("gif", "jpeg", "jpg", "png");
// Display images
foreach($files as $file) {
$pi - pathinfo($file);
if(!in_array($pi['extension'], $extensions)) {
$file = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
}
echo '<div class="one_half"><img src="' . $file . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
}
?>
可以使用正则表达式和preg_match
函数:
if (preg_match("/.*'.gif|jpg|jpeg|png$/i", $files)) {
$images = $file
} else {
$images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
}
另外,请参见preg_match文档。
注意:最好检查mime类型(如果可能的话),因为filename可以很容易地更改。