php文件查找(file search)

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>php版文件查找(file search)</title>
	</head>
	<body>
		<form action="" method="post">
		<p> 文件查找(注:区分大小写)</p>
		<p>路径:<input type="text" name="path" /></p>
		<p>查找:<input type="text" name="key" /></p>
		<p><input type="submit" name="sub" value=" 开 始 " /></p>
		</form>
	</body>
</html>
<?php
/*
 * 注:区分大小写
 */
if(!empty($_POST['path'])&&!empty($_POST['key'])){
	echo "在路径 ".$_POST['path']."/ 中查找 ".$_POST['key']." 的结果为:<hr/>";
	$file_num = $dir_num = 0;
	$r_file_num = $r_dir_num= 0;
	$findFile = $_POST['key'];
	function delDirAndFile( $dirName ){	
		if ( $handle = @opendir( "$dirName" ) ) {
			while ( false !== ( $item = readdir( $handle ) ) ) {  
				if ( $item != "." && $item != ".." ) {  
					if ( is_dir( "$dirName/$item" ) ) {  
						delDirAndFile( "$dirName/$item" );
					} else {  
						$GLOBALS['file_num']++;
						if(strstr($item,$GLOBALS['findFile'])){
							echo " <span><b> $dirName/$item </b></span><br />\n";
							$GLOBALS['r_file_num']++;
						}
					}  
				}
			}
			closedir( $handle );  
			$GLOBALS['dir_num']++;
			if(strstr($dirName,$GLOBALS['findFile'])){
				$loop = explode($GLOBALS['findFile'],$dirName);
				$countArr = count($loop)-1;
				if(empty($loop[$countArr])){
					echo " <span style='color:#297C79;'><b> $dirName </b></span><br />\n";
					$GLOBALS['r_dir_num']++;
				}
			}
		}else{
			die("没有此路径!");
		}
	}

	delDirAndFile($_POST['path']);
	echo "<hr/>本次共搜索到".$file_num."个文件,文件夹".$dir_num."个<br/>";
	echo "<hr/>符合结果的共".$r_file_num."个文件,文件夹".$r_dir_num."个<br/>";
}

?>

PHP 中实现多进程搜索文件内容可以使用 `pcntl_fork` 函数创建子进程,然后在每个子进程中进行搜索操作。 以下是一个简单的示例代码: ```php <?php $dir = '/path/to/search'; // 要搜索的目录 $keyword = 'search keyword'; // 要搜索的关键词 // 创建子进程进行搜索 $search = function ($dir) use ($keyword) { $pid = pcntl_fork(); if ($pid == -1) { die('Fork failed'); } elseif ($pid) { // 父进程不做任何操作 } else { // 子进程进行搜索 $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)); foreach ($iterator as $file) { if ($file->isFile() && strpos(file_get_contents($file->getPathname()), $keyword) !== false) { echo $file->getPathname() . "\n"; } } exit(0); } }; // 遍历目录进行搜索 $dirIterator = new RecursiveDirectoryIterator($dir); foreach ($dirIterator as $fileInfo) { if ($fileInfo->isDir()) { $search($fileInfo->getPathname()); } } ``` 这个示例中,我们首先定义了一个 `$search` 函数,该函数接受一个目录路径作为参数,使用 `pcntl_fork` 函数创建子进程来进行搜索操作。在搜索操作中,我们使用 `RecursiveDirectoryIterator` 遍历目录中的所有文件,然后使用 `file_get_contents` 函数读取文件内容,查找是否包含关键词,如果包含则输出文件路径。最后使用 `exit(0)` 函数结束子进程。 在主程序中,我们使用 `RecursiveDirectoryIterator` 遍历目录,对每个子目录调用 `$search` 函数来创建子进程进行搜索。这样就能够实现多进程搜索文件内容的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值