php读取单文件变成读取指定多文件逐行读取,求修改代码。

<?php
ini_set("error_reporting","E_ALL & ~E_NOTICE");
$contbody="";
function MakePage($charset,$where,$houzhui)
{
if($contbody=="")
{
$keywords = @file_get_contents("con5a/keyword.txt");
$arrs = preg_split("/(\n|\r\n|\r|\t)/",$keywords);
$alls= count($arrs);
$cont = @file_get_contents("con5a/view.txt");
}

function Run_Body($count){
$output = mt_rand(1,$count);
$contbody = @file_get_contents("con5a/data/$output.txt");
return $contbody;
}

function randomkeys($length){
$output='';
for($a=0;$a<$length;$a++){
$output.=chr(mt_rand(57,48));//生成php随机数
$output.=chr(mt_rand(122,97));//生成php随机数
}
return $output;
}
function randshuzi($length){
$output='';
for($a=0;$a<$length+1;$a++){

if (mt_rand(0,9)>5)
{
$output.=chr(mt_rand(122,97));//生成php随机数
}
else
{
$output.=mt_rand(0,9);
}
}
return $output;
}

?>

如何把
$keywords = @file_get_contents("keyword.txt");
$arrs = preg_split("/(\n|\r\n|\r|\t)/",$keywords);
$alls= count($arrs);
如何把单独读取
keyword.txt
变成读取
key目录下面所有txt文件来实现,并且要实现逐行读取。
就是像读取contbody这个函数变量一样实现读取data目录下的所有txt文件。

顺便帮忙检错下我代码哪里不规范了,会报错,只能写忽略文件头。。。

感谢。。

第1个回答  2012-07-08
function ls($dir, $mask /*.php$|.txt$*/)
{
static $i = 0;
$files = Array();
$d = opendir($dir);
while ($file = readdir($d))
{
if ($file == '.' || $file == '..' || eregi($mask, $file) ) continue;
if (is_dir($dir.'/'.$file))
{
$files += ls($dir.'/'.$file, $mask);
continue;
}
$files[$i++] = $dir.'/'.$file;
}
return $files;
}
$root = dirname(__FILE__);
$f = ls($root, ".php$" /*no spaces*/);
foreach ($f as $v){
print_r($v."<br>\r\n");//所有文件名
}
==============================
上面的代码可以实现所有文件读取

还有这个的话:
$keywords = @file_get_contents("keyword.txt");
$arrs = preg_split("/(\n|\r\n|\r|\t)/",$keywords);
$alls= count($arrs);

可以直接改为
$arrs = file("keyword.txt");
$alls= count($arrs);

==============================

$contbody = @file_get_contents("con5a/data/$output.txt");
变量加{$output}追问

可以直接改为
$arrs = file("keyword.txt");
$alls= count($arrs);

我要的是读取keyword.txt变成读取循环读取逐行key目录下所有txt文档哦

这样 执行效率会加快吗?我怕给服务器带来更大的负担
有更好的优化方案吗?现在就是服务器负担挺大的

追答

肯定比你现在的好,你可以去查手册

追问

我要的是读取keyword.txt变成读取循环逐行key目录下所有txt文档哦
就是单文件变成多文件来读取了

要循环 逐行的读取。。顺便帮忙加快下速度很 检错下。。。 会追分

追答

呼呼,已经给你写了的。。。。

$root = dirname(__FILE__);//root改成你实际的目录
$f = ls($root, ".php$" /*no spaces*/);
foreach ($f as $v){
//print_r($v."\r\n");//所有文件名
$arrs = file($v);
$alls= count($arrs);

}

这个代码不难理解吧?

追问

求贴出完整代码代码。整段的。。。加分100.。。谢谢 。。。貌似我phpcgi 调试会出错。。本人比较笨。。

追答

function ls($dir, $mask /*.php$|.txt$*/)
{
static $i = 0;
$files = Array();
$d = opendir($dir);
while ($file = readdir($d))
{
if ($file == '.' || $file == '..' || eregi($mask, $file) ) continue;
if (is_dir($dir.'/'.$file))
{
$files += ls($dir.'/'.$file, $mask);
continue;
}
$files[$i++] = $dir.'/'.$file;
}
return $files;
}
$f = ls('key', ".php$");//key是当前的目录名字
foreach ($f as $v){
//print_r($v."\r\n");//所有文件名
$array = file($v);
foreach($array as $vv){
echo $vv;
}
}

代码我在本地运行可以,再不行我真没法帮你了~

追问

$arrs = file("keyword.txt");
$alls= count($arrs);

能帮忙加个去空格和自动转格的函数吗?

$arrs = preg_split("/(\n|\r\n|\r|\t)/",$keywords);

类似原来这段

追答

file已经完成了 $arrs = preg_split("/(\n|\r\n|\r|\t)/",$keywords); 这个功能了
file就等于是执行了:
$keywords = @file_get_contents("keyword.txt");
$arrs = preg_split("/(\n|\r\n|\r|\t)/",$keywords);

追问

你好 这样 直接
$arrs = file("keyword.txt");
$alls= count($arrs);

换造成我网站关键词变成一行一个了,下一个关键词又是下一行了。不能变成同一行的吗?
1
2
3

就是这样

能帮忙弄成逐行
123 这样来么?顺便帮忙去空格

追答

那加个替换吧
echo str_replace($array("\r","\n"," ","\t"), '', $vv);

第2个回答  2012-07-09
$xxx = mt_rand(1,1000);
$a=file('word'. $xxx .'.txt');
$a = str_replace("\r\n","",$a); //过滤多余回车本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网