我正在尝试查看文件夹并选择文件夹中的所有图像文件,然后生成缩略图名称(xx.jpg将转换为xx_thumb.jpg)。现在我使用scandir遍历文件夹和子文件夹,我找不到适合我的glob解决方案。我在PHP版本5.2.17。任何人都有我的建议:
_thumb
的图片?我的hacky if语句让我发疯。 正确解析字符串是否有缩略图?例如,xx.xx.jpg现在无法正常工作。它返回xx_thumb.xx.jpg而不是xx.xx_thumb.jpg
<?php
$file = scandir($imgDir);
for($i=0;$i<count($file);$i++) {
if((strpos($file[$i],'jpg') !== false||strpos($file[$i],'png') !== false) && strpos($file[$i],'_thumb') == false){
//add the text _thumb to a thumb
$thumb=explode('.',$imgDir.$file[$i]);
$thumb=$thumb[0].'_thumb.'.$thumb[1];
//echo('<br>'.$thumb);
//echo('<br>'.$file[$i]);
?>
答案 0 :(得分:0)
我认为您仍然可以使用scandir()
代替glob()
<?php
$img_extensions = ["jpg", "png"];
function matching_end($s1, $s2){
return substr($s1, - strlen($s2)) === $s2;
}
foreach (scandir($imgDir) as $file) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if ( in_array($ext, $img_extensions) && !matching_end(pathinfo($file, PATHINFO_FILENAME), "_thumb") && substr($file, 0, 1) !== "." ) {
$thumb = pathinfo($file, PATHINFO_FILENAME) . "_thumb." . pathinfo($file, PATHINFO_EXTENSION);
}
}
此代码正确地发现扩展名,即使该文件是大写的(myimage.JPG
之类的文件是好的;为了进行更强的检查,您应该验证其mime content,但这是不是问题的一部分);和大写扩展区域以正确的方式处理:文件my-image.JPG
提供my-image_thumb.JPG
结果。
丢弃带有前导点的文件(GNU / Linux实现中的隐藏文件)。另外,在整个文件名中没有搜索"_thumb"
子字符串,但是不应该匹配文件名结尾,没有扩展名。
_thumb
个文件名。