php实现将一个文件中的内容替换
发布网友
发布时间:2022-04-06 03:06
我来回答
共3个回答
热心网友
时间:2022-04-06 04:36
命令行下 “ren *.php *.htm” 就可以啊
如果不只是为了修改文件名 而是为了由动态页面生成静态页面 也就是说生成的htm是那个php的预览效果页面
那么具体的还得根据你的php内部代码处理
看你提供的那段代码好像就是实现了一个修改文件名的功能 如果你不愿用命令 就是想用php实现这一功能的话 可以这么写:
$path="./";
$d = dir($path);
while($f=$d->read()) {
if($f=="."||$f=="..")continue;//去掉目录列表中的.和..
$filename=rand(1111111111,9999999999).".htm";//从1111111111-9999999999 中产生一个随机数作为文件名
copy($f,$filename);
}
这个就可以实现你说的功能
但是还有点不是很完善的 你还可以设置输出的路径,检查拷贝状态 多少文件成功多少失败等等 如下
$path="./";
$outputpath="out/";//输出目录
@mkdir($outpath);//如果输出目录不存在 则创建 已经存在创建失败,但不显示出错信息
$d = dir($path);
$i=0;//记录文件数量
while($f=$d->read()) {
if($f=="."||$f=="..")continue;//去掉目录列表中的.和..
$i++;
$filename=$outpath.rand(1111111111,9999999999).".htm";//从1111111111-9999999999 中产生一个随机数作为文件名
if(copy($f,$filename))$j++;//拷贝成功的文件个数+1
else continue;
}
echo "共 $i 个文件 成功拷贝 $j 个文件";
我看到你的消息了 你是要获取所有的页面的预览效果
只需要在copy的文件加上预览的路径就可以了
<?
$path="./"; //文件读取目录
$d = dir($path);
$i=0;//记录文件数量
while($f=$d->read()) {
if($f=="."||$f==".."||$f=="copyfile.php")continue;//去掉目录列表中的.和..以及当前执行的文件
$i++;
$filename=str_replace(".php",".htm",$f);//将文件的.php替换成.htm
if(copy("".$f,$filename))$j++;//拷贝成功的文件个数+1
else continue;
}
echo "共 $i 个文件 成功拷贝 $j 个文件";
?>
在用的时候确保你的目录先所有的文件都能顺利的的执行 我在测试的时候因为目录中有几个文件有问题 导致一直不成功 去掉了那几个文件就很快了
在对文件名进行处理的时候 如果你的目录下面还有其他类型的文件,建议这样写 :
$filename=$f.".html";//先将文件扩展名增加.html 比如a.php-》a.php.html
$filename=str_replace(".php.","",$filename); //将".php"去掉 a.php.html->a.html
这样可以避免将里面的非php的文件覆盖追问哎 不是说的最多的就是沾边的啊
热心网友
时间:2022-04-06 05:54
//用正则表达式去匹配
//成功返回 true, $file 文件, $host 主机名,$ip 要替换的新IP
edit('1.txt', 'aaa', '127.0.0.1');
function edit($file, $host, $ip = NULL){
$content = @file_get_contents($file);
if(!$content){
return false;
}
$host = preg_quote($host);
$content = preg_replace('/(hostname[\s]+'.$host.'[\s]{0,}[\r\n]+hostip[\s]+)[^\r\n]+/', "$1 $ip", $content);
return file_put_contents($file, $content) ? true : false;
}追问$content = preg_replace('/(hostname[\s]+'.$host.'[\s]{0,}[\r\n]+hostip[\s]+)[^\r\n]+/', "$1 $ip", $content);
能帮我解释下含义吗?另外,如果我1.txt中的内容每行前面都有一些空格该怎么办?比如:
hostname aaa
hostip 192.168.0.1
hostname bbb
hostip 192.168.1.100
......
好像这样就没办法了
追答详细的去看一下正则表达式的语法
[\s]+ 匹配一个或多个空白字符
[\s]{0,} 匹配 0 个或多于 0 个的空白字符
[\r\n]+ 匹配一个或多个换行或回车
[^\r\n]+ 匹配不包换回车或换行的多个字符
连在一起就是 hostname 后面跟着你要把主机名,然后下面一行是 hostip, 然后看是否符合这条件,或是符合的话就替换
若是下一行前面有空格的话改一下
$content = preg_replace('/(hostname[\s]+'.$host.'[\s]{0,}[\r\n]+hostip[\s]+)[^\r\n]+/', "$1 $ip", $content);
改成
$content = preg_replace('/(hostname[\s]+'.$host.'[\s]{0,}[\r\n]+[\s]{0,}hostip[\s]+)[^\r\n]+/', "$1 $ip", $content);
就是多加一个 [\n\r]+ 加一个空白处理[\s]{0,}
热心网友
时间:2022-04-06 07:28
建议使用占位符 str_replace 来生成
如果读取已有的建议 explode 分割,查询