我的名字中包含括号的目录。 即“dir_123 [test@test.de]”
在那些目录中有.tif文件。
我所做的是计算Tif文件。在我的Mac上,我使用MAMP做到了这一点并且效果很好:
$anz = count(glob(str_replace("[", "\[", "dir_123[test@test.de]/*.tif")));
在运行XAMPP的Windows计算机上,因为括号而无法正常工作:
$anz = count(glob(str_replace("[", "\[", "dir_123[test@test.de]\\*.tif")));
如何让我的XAMPP服务器读取该目录?
答案 0 :(得分:1)
你试图逃脱所有特殊角色吗?
实施例
$dir = "dir_123[test@test.de]";
$from = array('[',']');
$to = array('\[','\]');
$anz = count(glob(str_replace($from,$to,$dir . "\\*.tif")));
这适用于Ubuntu。
如果这不起作用,你可以这样做:
function countTif($dir) {
$ret = 0;
$scan = scandir($dir);
foreach($scan as $cur) {
$ret += ((substr($cur,-4) == ".tif")?1:0);
}
return $ret;
}
如果你需要递归计数:
function countTif($dir) {
$ret = 0;
$scan = scandir($dir);
foreach($scan as $cur) {
if(is_dir("$dir/$cur") and !in_array($cur,array('.','..'))) {
$ret += countTif("$dir/$cur");
} else {
$ret += ((substr($cur,-4) == ".tif")?1:0);
}
}
return $ret;
}
这个函数在我的Ubuntu 9.04计算机上使用php 5.2.6-3ubuntu4.1进行了测试和工作
希望它适用于你!
//LinusUnnebäck
答案 1 :(得分:1)
访问http://unixhelp.ed.ac.uk/CGI/man-cgi?glob+7以了解glob()的通配符。
所以,正确的逃避是:
$pattern = "dir_123[test@test.de]/*.tif";
if ( strpos($pattern, '[') !== false || strpos($pattern, ']') !== false )
{
$placeholder = uniqid();
$replaces = array( $placeholder.'[', $placeholder.']', );
$pattern = str_replace( array('[', ']', ), $replaces, $pattern);
$pattern = str_replace( $replaces, array('[[]', '[]]', ), $pattern);
}
$anz = count(glob( $pattern ));
答案 2 :(得分:0)
我通过使用此代码解决了它:
$dir = scandir("\\\\server\\dir");
foreach ($dir as $key=>$row)
if (end(explode(".", $row)) != "tif")
unset($dir[$key]);
$anz = count($dir);