我有一个php脚本来检查Linux系统中是否存在任何文件。
如果我从目录中删除该文件,当我调用file_exists函数时脚本仍然为true,但该目录为空。
似乎scandir function
在结果目录中扫描点给我文件退出语句。
另外,我试过glob function
我得到的结果相同。
这是我的代码: -
<?php
while(true)
{
foreach (scandir("/var/log/phplogs/iplogs/") as $filename)
{
if(file_exists("/var/log/phplogs/iplogs/$filename"))
{
echo "file exist\n";
}
else
{
echo "file doesn't exist\n";
}
}
}
?>
答案 0 :(得分:0)
我不认为scandir的内置功能可以帮助解决这个问题。但是你可以简单地做这样的事情:
$filtered_contents = array_diff(scandir("/var/log/phplogs/iplogs/"), array('..', '.'));
然后在$filtered_contents
循环中使用foreach
而不是scandir
来电。
答案 1 :(得分:0)
使用is_file()
检查它是否是文件而不是目录。另外,clearstatcache()
:
while(true)
{
clearstatcache();
foreach(scandir("/var/log/phplogs/iplogs/") as $filename)
{
if(is_file("/var/log/phplogs/iplogs/$filename"))
{
echo "file exist\n";
}
elseif(!is_dir("/var/log/phplogs/iplogs/$filename"))
{
echo "file doesn't exist\n";
}
}
}
答案 2 :(得分:0)
您可以使用此代码跳过.
结果中的..
和scandir
结果:
<?php
$files = array_filter(scandir('/var/log/phplogs/iplogs/'), function($item) {
return $item !== '.' && $item !== '..';
});
foreach ($files as $filename)
{
if(file_exists("/var/log/phplogs/iplogs/$filename"))
{
echo "file exist\n";
}
else
{
echo "file doesn't exist\n";
}
}
通过修改array_filter
回调,您也可以省略其他文件甚至子目录。