-1
<?php
$imgdir = 'img/';
$allowed_types = array('png','jpg','jpeg','gif'); //Allowed types of files
$dimg = opendir($imgdir);//Open directory
while($imgfile = readdir($dimg))
{
//please explain this part!!
if( in_array(strtolower(substr($imgfile,-3)),$allowed_types) OR
    in_array(strtolower(substr($imgfile,-4)),$allowed_types) )
{$a_img[] = $imgfile;}
}

$totimg = count($a_img);
for($x=0; $x < $totimg; $x++){echo "<li><img src='" . $imgdir . $a_img[$x] . "'/></li>"
;}?>

我明白,这就像婴儿步,但我的问题是:我阅读了 php 手册,但我真的不明白为什么 substr 部分是这样的!请帮忙!谢谢!

4

3 回答 3

2

它正在检查文件名的最后 3 个字符,然后是最后 4 个字符以获取扩展名并查看它是否在允许的类型数组中。

但是,使用它可能会更好pathinfo()http://php.net/manual/en/function.pathinfo.php

$path_parts = pathinfo($imgfile);
if( in_array(strtolower($path_parts['extension']),$allowed_types) ) {
    $a_img[] = $imgfile;
}
于 2013-07-10T14:11:20.277 回答
0

substr($imgfile,-3); 等于substr($imgfile, strlen($imgfile)-4);

这意味着您只会收到字符串的最后 3 个字符。在这种情况下,作者首先检查最后 3 个字符,然后检查最后 4 个字符,以查看它是否是允许的扩展名。

有关更多信息,请再次检查文档:string substr ( string $string , int $start [, int $length ] )

于 2013-07-10T14:12:33.800 回答
0

让我像婴儿语言一样向你解释:D

substr 有两个参数,一个字符串和一个数字。String 是文本或文件名等字符,number 是您想要获取的字符数。

如果数字为正数,则从左侧取字符,如果数字为负数,则从右侧取字符。在您的代码中:

substr($imgfile,-3)  // takes three characters from left

这意味着,取图像文件名的最后三个字符,即文件的扩展名,并且

substr($imgfile,-4)  // takes four characters from right side

表示取最后四个字符。

在您允许的类型数组中:

$allowed_types = array('png','jpg','jpeg','gif');

您有三个字符扩展名和一个四个字符扩展名,因此这两个 substr 用于这些目的。

我希望我用简单的话为你解释了它。

谢谢

于 2013-07-10T14:19:45.893 回答