hongqigong
V2EX  ›  PHP

如何写 PHP 查询 TXT 文件内容

  •  
  •   hongqigong · Nov 3, 2015 · 5887 views
    This topic created in 4019 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
    sunjourney
    Nov 3, 2015 via iPhone
    1
    这有点难啊,可能你培训老师会知道
    realpg
    realpg
    Nov 3, 2015
    2
    这个太难了。问一下你的培训机构老师吧。
    rainysia
    rainysia
    Nov 3, 2015
    3
    这有点难啊,可能你培训老师会知道
    rainysia
    rainysia
    Nov 3, 2015
    4
    这有点难啊 ~可能你培训老师会知道
    faceair
    faceair
    Nov 3, 2015
    5
    读文件 根据换行符切分成数组 遍历数组根据输入匹配行 输出行
    jugelizi
    jugelizi
    Nov 3, 2015
    6
    是有点难 楼下会吗
    Neytoph
    Neytoph
    Nov 3, 2015
    7
    等我问问我师父
    zakokun
    zakokun
    Nov 3, 2015
    8
    稍等,我请教下我们公司的 CTO
    wjself
    wjself
    Nov 3, 2015
    9
    233 ,不要這樣嘛…直接 if 語句寫滿要判斷的郵箱不就好了嘛…
    dofy
    dofy
    Nov 3, 2015
    10
    ```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
    wkdhf233
    Nov 3, 2015
    11
    $mail = '[email protected]';
    $fp = fopen('data.txt', "r");
    while (!feof($fp)) {
    $line = trim(fgets($fp));
    if($mail == split('----', $line)[4]){
    echo $line;
    }
    }
    dofy
    dofy
    Nov 3, 2015
    12
    原来回复不支持 markdown 啊。。。
    solu
    solu
    Nov 3, 2015
    13

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

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

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

    echo shell_exec('grep "[email protected]" a.txt');
    moro
    moro
    Nov 3, 2015
    30
    这个问题有一个点需要考虑,就是不能把所有文件全部读入进来,如果这个文件很大的话,内存会爆掉。
    可以用随机读写的函数, 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
    codingpp
    Nov 3, 2015
    31
    楼主说的是查询 [email protected] 能得出
    张三----2015 年 10 月 2 日 10 时[email protected]

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

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

    且不说 3P 了, 就 3T 数据吧 ........
    owlsec
    owlsec
    Nov 3, 2015
    34
    @hambut 哈哈哈你笑死我了
    ryd994
    ryd994
    Nov 4, 2015
    35
    @xfspace
    @tabris17
    我刚问了培训班的老师,老师当场晕过去了怎么办?
    jalen
    jalen
    Nov 4, 2015
    36
    不解, 怎么确定就是培训老师出的题目?
    hongqigong
    hongqigong
    OP
    Nov 4, 2015
    37
    @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
    zjqzxc
    Nov 4, 2015
    38
    "PHP 页面输入 [email protected] 此邮箱就能显示张三这条信息,输入其他的则不返回信息"

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

    是吧,,“输入其他的则不返回信息”,是这么理解的吧。
    hongqigong
    hongqigong
    OP
    Nov 4, 2015
    39
    @zjqzxc 差不多 是这个意思, TXT 里面内容都是这样的格式 主要是搜索邮箱 出这列的结果 其他的都不出现 ~~~ 现在不知道怎么来写了~~~
    mengzhuo
    mengzhuo
    Nov 4, 2015
    40
    没有索引,没有其他条件的话
    O(N)是跑不了了
    elvba
    elvba
    Nov 9, 2015
    42
    $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
    inmyfree
    Nov 19, 2015
    43
    php 的代码我就不给了,给了一个 shell 的结合 cat,grep ,和正则查找的,php 逻辑是一样的,有兴趣的可以看看

    https://github.com/inmyfree/gits/blob/master/grep_php.md
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2530 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 107ms · UTC 14:55 · PVG 22:55 · LAX 06:55 · JFK 09:55
    ♥ Do have faith in what you're doing.