PHP文件操作 - 替换某行,插入某行,删除某行,获取行号

<?php
// fedora-centos-apache-php-cannot-write-delete-file
// getsebool -a|grep httpd
// httpd_unified --> off
// setsebool -P httpd_unified 1

replaceTarget("test.txt", "aaaaaaaaaaaaaaaaa", "AAAAA");
//unlink("test.txt");

#替换指定字符串
function replaceTarget($filePath, $replaceCont, $target)
{
    $result = null;
    $fileCont = file_get_contents($filePath);
    $targetIndex = strpos($fileCont, $target); #查找目标字符串的坐标

    if ($targetIndex !== false) {
        #找到target的前一个换行符
        $preChLineIndex = strrpos(substr($fileCont, 0, $targetIndex + 1), "\n");
        #找到target的后一个换行符
        $AfterChLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;
        if ($preChLineIndex !== false && $AfterChLineIndex !== false) {
            #删掉指定行,插入新内容
            $result = substr($fileCont, 0, $preChLineIndex + 1) . $replaceCont . "\n" . substr($fileCont, $AfterChLineIndex + 1);
            file_put_contents($filePath, $result);
            //$fp = fopen($filePath, "w+");
            //fwrite($fp, $result);
            //fclose($fp);
        }
    }
}

#在需要查找的内容后一行新起一行插入内容
function insertAfterTarget($filePath, $insertCont, $target)
{
    $result = null;
    $fileCont = file_get_contents($filePath);
    $targetIndex = strpos($fileCont, $target); #查找目标字符串的坐标

    if ($targetIndex !== false) {
        #找到target的后一个换行符
        $chLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;
        if ($chLineIndex !== false) {
            #插入需要插入的内容
            $result = substr($fileCont, 0, $chLineIndex + 1) . $insertCont . "\n" . substr($fileCont, $chLineIndex + 1);
            file_put_contents($filePath, $result);
            //$fp = fopen($filePath, "w+");
            //fwrite($fp, $result);
            //fclose($fp);
        }
    }
}

#删除内容所在的某一行
function delTargetLine($filePath, $target)
{
    $result = null;
    $fileCont = file_get_contents($filePath);
    $targetIndex = strpos($fileCont, $target); #查找目标字符串的坐标

    if ($targetIndex !== false) {
        #找到target的前一个换行符
        $preChLineIndex = strrpos(substr($fileCont, 0, $targetIndex + 1), "\n");
        #找到target的后一个换行符
        $AfterChLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;
        if ($preChLineIndex !== false && $AfterChLineIndex !== false) {
            #重新写入删掉指定行后的内容
            $result = substr($fileCont, 0, $preChLineIndex + 1) . substr($fileCont, $AfterChLineIndex + 1);
            file_put_contents($filePath, $result);
            //$fp = fopen($filePath, "w+");
            //fwrite($fp, $result);
            //fclose($fp);
        }
    }
}

#获取某段内容的行号
/**
 * @param $filePath
 * @param $target   待查找字段
 * @param bool $first   是否再匹配到第一个字段后退出
 * @return array
 */
function getLineNum($filePath, $target, $first = false)
{
    $fp = fopen($filePath, "r");
    $lineNumArr = array();
    $lineNum = 0;
    while (!feof($fp)) {
        $lineNum++;
        $lineCont = fgets($fp);
        if (strstr($lineCont, $target)) {
            if($first) {
                return $lineNum;
            } else {
                $lineNumArr[] = $lineNum;
            }
        }
    }
    return $lineNumArr;
}

?>

referer: http://www.cnblogs.com/zemliu/archive/2012/06/16/2551541.html



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值