hongqigong
V2EX  ›  PHP

如何写 PHP 查询 TXT 文件内容

  •  
  •   hongqigong · Nov 3, 2015 · 5526 views
    This topic created in 3874 days ago, the information mentioned may be changed or developed.

    各位技术帝,帮忙写个 PHP 查询 TXT 里面内容的查询页面

    如: TXT 内容
    张三----2015 年 10 月 2 日 10 时[email protected]
    李四----2015 年 10 月 2 日 10 时[email protected]
    王五----2015 年 10 月 2 日 10 时[email protected]

    PHP 页面输入 [email protected] 此邮箱就能显示张三这条信息,输入其他的则不返回信息

    如何实现

    43 replies    2015-11-19 17:53:01 +08:00
    sunjourney
        1
    sunjourney  
       Nov 3, 2015 via iPhone
    这有点难啊,可能你培训老师会知道
    realpg
        2
    realpg  
    PRO
       Nov 3, 2015
    这个太难了。问一下你的培训机构老师吧。
    rainysia
        3
    rainysia  
       Nov 3, 2015
    这有点难啊,可能你培训老师会知道
    rainysia
        4
    rainysia  
       Nov 3, 2015
    这有点难啊 ~可能你培训老师会知道
    faceair
        5
    faceair  
       Nov 3, 2015
    读文件 根据换行符切分成数组 遍历数组根据输入匹配行 输出行
    jugelizi
        6
    jugelizi  
       Nov 3, 2015
    是有点难 楼下会吗
    Neytoph
        7
    Neytoph  
       Nov 3, 2015
    等我问问我师父
    zakokun
        8
    zakokun  
       Nov 3, 2015
    稍等,我请教下我们公司的 CTO
    wjself
        9
    wjself  
       Nov 3, 2015
    233 ,不要這樣嘛…直接 if 語句寫滿要判斷的郵箱不就好了嘛…
    dofy
        10
    dofy  
       Nov 3, 2015
    ```php
    <?php
    $txt =
    '张三----2015 年 10 月 2 日 10 时[email protected]
    张三 A----2015 年 10 月 2 日 10 时[email protected]
    李四----2015 年 10 月 2 日 10 时[email protected]
    王五----2015 年 10 月 2 日 10 时[email protected]';

    $email = '[email protected]';
    $newEmail = str_replace('.', '\.', $email);

    $reg = "/.*?\-$newEmail$/m";

    preg_match_all($reg, $txt, $result);

    var_dump($result);
    ?>
    ```
    wkdhf233
        11
    wkdhf233  
       Nov 3, 2015
    $mail = '[email protected]';
    $fp = fopen('data.txt', "r");
    while (!feof($fp)) {
    $line = trim(fgets($fp));
    if($mail == split('----', $line)[4]){
    echo $line;
    }
    }
    dofy
        12
    dofy  
       Nov 3, 2015
    原来回复不支持 markdown 啊。。。
    solu
        13
    solu  
       Nov 3, 2015

    其实调用系统命令也是一种选择, awk 不懂就不举例了
    b821025551b
        14
    b821025551b  
       Nov 3, 2015
    @solupro 哇这是什么呀看起来好厉害的样子~
    solu
        15
    solu  
       Nov 3, 2015
    @b821025551b
    有必要这样冷嘲热讽吗?
    7z7
        16
    7z7  
       Nov 3, 2015
    分割成为数组,那样就可以取出了。
    Scholer
        18
    Scholer  
       Nov 3, 2015
    @solupro 不用先 cat 吧 😂 grep 1234 data.txt 就行了
    solu
        19
    solu  
       Nov 3, 2015
    @Scholer 命令不熟悉
    aisk
        20
    aisk  
       Nov 3, 2015
    @solupro 有啊,今天你告诉他答案明天他还来伸手问。
    LioMore
        21
    LioMore  
       Nov 3, 2015
    @b821025551b 有必要这样冷嘲热讽吗?
    superliang
        22
    superliang  
       Nov 3, 2015
    转成 csv 大把的类可以让你调用
    SharkIng
        23
    SharkIng  
       Nov 3, 2015
    file()
    array()
    if()
    WeeH9T
        24
    WeeH9T  
       Nov 3, 2015
    是时候上这个珍藏多年的黑科技了

    @Scholer @solupro @infong @myleon
    WeeH9T
        25
    WeeH9T  
       Nov 3, 2015   ❤️ 1
    https://github.com/harelba/q

    日光 at 了忘记写地址了。。。
    jarlyyn
        26
    jarlyyn  
       Nov 3, 2015
    csv 或者正则
    tabris17
        27
    tabris17  
       Nov 3, 2015
    这道题只有北大青鸟的校长才会做了,太难了
    liujiantao
        28
    liujiantao  
       Nov 3, 2015 via iPhone
    fopen 读文件,再分隔字符串
    hongcha
        29
    hongcha  
       Nov 3, 2015
    <?php

    echo shell_exec('grep "[email protected]" a.txt');
    moro
        30
    moro  
       Nov 3, 2015
    这个问题有一个点需要考虑,就是不能把所有文件全部读入进来,如果这个文件很大的话,内存会爆掉。
    可以用随机读写的函数, fseek,fgets 等

    <?php
    $handle = @fopen("./inputfile.txt", "r");
    $finder = "[email protected]";
    if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
    if (strpos($buffer, $finder) != false ){
    echo $buffer;
    }
    }
    if (!feof($handle)) {
    echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
    }
    codingpp
        31
    codingpp  
       Nov 3, 2015
    楼主说的是查询 [email protected] 能得出
    张三----2015 年 10 月 2 日 10 时[email protected]

    大家都打错了
    这题还是有点难度的,还是问培训老师吧
    xfspace
        32
    xfspace  
       Nov 3, 2015 via Android
    @codingpp 得问北大青鸟 /蓝翔的校长吧,培训老师还是水
    500miles
        33
    500miles  
       Nov 3, 2015
    我天 怎么都这副模样

    人都没说数据大小好么 ... 一个劲的热潮冷讽...

    且不说 3P 了, 就 3T 数据吧 ........
    owlsec
        34
    owlsec  
       Nov 3, 2015
    @hambut 哈哈哈你笑死我了
    ryd994
        35
    ryd994  
       Nov 4, 2015
    @xfspace
    @tabris17
    我刚问了培训班的老师,老师当场晕过去了怎么办?
    jalen
        36
    jalen  
       Nov 4, 2015
    不解, 怎么确定就是培训老师出的题目?
    hongqigong
        37
    hongqigong  
    OP
       Nov 4, 2015
    @moro @ solupro @dofy 请问这个代码有什么问题? 如何来写输出的内容?

    <html>
    <head>
    <meta charset="utf-8">
    </head>
    <body>
    <form method="post" action="">
    输入想要搜索的内容:<input type="text" name="content" /></br>
    <input type="submit" value="search" />
    </form>
    </body>
    </html>
    <?php
    $search=$_POST['content'];

    $fh=fopen("text.txt","r");

    while(! feof($fh)) ==true){
    if($str['0']==$search){
    echo $str['1']."</br>";
    }

    }

    fclose($fh);

    ?>
    zjqzxc
        38
    zjqzxc  
       Nov 4, 2015
    "PHP 页面输入 [email protected] 此邮箱就能显示张三这条信息,输入其他的则不返回信息"

    楼主的意思明明是:
    if($str=='[email protected]') echo '张三----2015 年 10 月 2 日 10 时[email protected]';
    读文件干嘛。。

    是吧,,“输入其他的则不返回信息”,是这么理解的吧。
    hongqigong
        39
    hongqigong  
    OP
       Nov 4, 2015
    @zjqzxc 差不多 是这个意思, TXT 里面内容都是这样的格式 主要是搜索邮箱 出这列的结果 其他的都不出现 ~~~ 现在不知道怎么来写了~~~
    mengzhuo
        40
    mengzhuo  
       Nov 4, 2015
    没有索引,没有其他条件的话
    O(N)是跑不了了
    dofy
        41
    dofy  
       Nov 4, 2015
    elvba
        42
    elvba  
       Nov 9, 2015
    $path = 'tmp.txt';
    $input = '[email protected]';

    if (!file_exists($path)) return;

    $ret = array_filter(file($path), function ($v) use ($input) {return strstr($v, $input) !== false;});
    var_dump($ret);
    inmyfree
        43
    inmyfree  
       Nov 19, 2015
    php 的代码我就不给了,给了一个 shell 的结合 cat,grep ,和正则查找的,php 逻辑是一样的,有兴趣的可以看看

    https://github.com/inmyfree/gits/blob/master/grep_php.md
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5245 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 144ms · UTC 07:36 · PVG 15:36 · LAX 00:36 · JFK 03:36
    ♥ Do have faith in what you're doing.