我正在遍历目录中的文件列表,我希望将我拥有的子字符串与文件名匹配。如果文件名包含子字符串,则返回该文件名,以便我可以删除它。我做了以下事情,它只是返回了所有内容:
while ($file = readdir($dir_handle)) {
$extension = strtolower(substr(strrchr($file, '.'), 1));
if($extension == "sql" || $extension == "txt" ) {
$pos = strpos($file, $session_data['user_id']);
if($pos === true) {
//unlink($file);
echo "$file<br />";
}else {
// string not found
}
}
}
我做错了什么?
感谢大家的帮助
答案 0 :(得分:4)
strpos返回一个整数或FALSE。您需要将测试更新为
$pos !== FALSE
然后 - 如果要删除文件,可以取消注释unlink()调用。我不确定你的意思是“返回所以我可以删除”。
答案 1 :(得分:1)
假设您使用的是Linux,可以使用带有GLOB_BRACE
选项的[glob()] [1]函数执行此操作:
$files = glob('*.{sql,txt}', GLOB_BRACE);
你也可以在那里混合user_id。
不确定它是否适用于Windows。请参阅http://de.php.net/glob,并注意有关GLOB_BRACE
选项的说明。
答案 2 :(得分:0)
if ($handle = opendir('/path/to/dir/') {
$extensions = array('sql' => 1, 'txt' => 1);
while (false !== ($file = readdir($handle))) {
$ext = strtolower(substr(strrchr($file, '.'), 1));
if (isset($extensions[$ext]) && strpos($file, $session_data['user_id']) !== false)
echo "$file<br />";
else
echo "no match<br />";
}
}
}
答案 3 :(得分:0)
您可以使用SPL递归执行
foreach (new DirectoryIterator('/path') as $file) {
if($file->isDot()) continue;
$filename = $file->getFilename();
$pathname = $file->getPathname();
if ( strpos ($filename ,".sql") !==FALSE ) {
echo "Found $pathname\n";
$pos = strpos($filename, $session_data['user_id']);
......
#unlink($pathname); #remove your file
}
}