在PHP中遇到有关scandir()
函数的一些问题。
当尝试回显当前目录中的文件列表时,它会将.
和..
作为目录回显。我试图像这样过滤掉这些:
<?php
$dir = "pages";
if ($d = scandir($dir)) {
foreach ($d as $value) {
echo("<script>console.log(\"$value\")</script>");
if ($value !== '.' || $value !== '..') {
echo("<p><a href=\"$dir/$value\">$value</a></p>");
} else {
echo("");
}
}
}
我觉得很明显,我错过了。
有没有人有任何想法?
-R
答案 0 :(得分:1)
根据documentation,scandir()
返回目标目录中的文件和目录数组。所以你可以使用array_diff
,它最终将返回一个数组,其中包含第一个数组中第二个数组中不存在的所有条目:
array_diff(scandir($directory), ['..', '.']);
或者,如果你太懒,那么你实际上可以array_shift
前两个元素:
$dir = "pages";
if($d = scandir($dir)) {
array_shift($d);
array_shift($d);
...
}
答案 1 :(得分:1)
我喜欢这样做:
axis([0.1 150])
这样,它会从 $dir = "pages";
if($d = scandir($dir)) {
foreach($d as $file){
if(substr($file,0,1) == '.') continue;
echo "$file\n";
}
}
开始跳过所有$file
,例如.
等。
但是我的项目中有很多这样的东西:
.htaccess
答案 2 :(得分:0)
我会使用is_file()。它也会避免目录。
chmod 775 /magento/app/code/vendorname/modulename -R
答案 3 :(得分:0)
只需在找到.
或..
只需在foreach
块的第一行添加:
if($value == '.' || $value == '..') continue;
# your rest of codes
OR
if(in_array($value, array(".",".."))) continue;
# your rest of codes
答案 4 :(得分:0)
:
if ($value !== '.' || $value !== '..') {
当$ value等于&#34;。&#34;那肯定不等于&#34; ..&#34;同时,所以&#34; ||&#34;的一面。对于&#34;。&#34;,对#34; ..&#34;总体结果将是真实的。
你需要:
if ($value !== '.' && $value !== '..') {
或
if ($value == '.' || $value == '..') continue;