V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
emptyhua
V2EX  ›  PHP

PHP 确实是世界上最好的语言..

  •  
  •   emptyhua · 2015-01-08 16:31:39 +08:00 · 11548 次点击
    这是一个创建于 3389 天前的主题,其中的信息可能已经有所发展或是发生改变。
    file_get_contents('zip://test.zip#test.txt');

    直接读取zip中的指定文件,这么贴心,碉堡了。。
    第 1 条附言  ·  2015-01-08 17:09:06 +08:00
    毫无群嘲什么的意思,只是今天才发现这么吊的用法,如果诸位还有更牛b的用法,也可以让俺开开眼:)
    第 2 条附言  ·  2015-01-08 17:52:40 +08:00
    铜币能吃么。。
    第 3 条附言  ·  2015-01-08 19:03:49 +08:00
    这个不仅仅是个函数封装的问题。这个东西是php内置的streams系统,只要支持streams的函数,都可以这么用。。。
    第 4 条附言  ·  2015-01-08 22:11:54 +08:00
    。。发送感谢10个铜子,收到回应5个,我是不是赔了很多
    第 5 条附言  ·  2015-01-09 12:13:28 +08:00
    嗯,高级用法,远程ssh拖一个文件回来,对其base64编码。。

    echo file_get_contents('php://filter/read=convert.base64-encode/resource=ssh2.sftp://[email protected]:/root/.vimrc');
    78 条回复    2015-01-15 10:40:09 +08:00
    shuson
        1
    shuson  
       2015-01-08 16:40:03 +08:00   ❤️ 5
    语法糖或者方法糖不能决定一个语言的好坏
    hyq
        2
    hyq  
       2015-01-08 16:42:00 +08:00   ❤️ 2
    zcat test.zip
    shell才是世界上最好的语言
    tini8
        3
    tini8  
       2015-01-08 16:42:00 +08:00   ❤️ 1
    这种函数别的语言也能封装出来
    hkongm
        4
    hkongm  
       2015-01-08 16:42:49 +08:00   ❤️ 1
    好帖,先收藏,过会儿再来看……
    rrfeng
        5
    rrfeng  
       2015-01-08 16:43:22 +08:00   ❤️ 2
    我在本帖同意楼主的说法。我是世界上最好的人
    emptyhua
        6
    emptyhua  
    OP
       2015-01-08 16:43:35 +08:00
    @shuson 嗯,这个特性不属于语法糖,就是一个正常的函数调用而已。其原理得益于php的stream系统。
    kmvan
        7
    kmvan  
       2015-01-08 16:44:31 +08:00 via Android   ❤️ 1
    说明php才是大众化的,感谢php作者
    tmkook
        8
    tmkook  
       2015-01-08 16:45:05 +08:00   ❤️ 1
    还能发送POST请求呢
    nickdine
        9
    nickdine  
       2015-01-08 16:45:52 +08:00   ❤️ 1
    一切大字报式喊口号式说话妄断下结论的都是智商不怎么高的
    上面一句话说的人-我 智商很低!
    cxl008
        10
    cxl008  
       2015-01-08 16:46:21 +08:00   ❤️ 1
    日经贴
    emptyhua
        11
    emptyhua  
    OP
       2015-01-08 16:46:21 +08:00
    @hyq 骚年,要把指定文件找出来哦
    blijf
        12
    blijf  
       2015-01-08 16:51:48 +08:00   ❤️ 1
    收铜币专用贴
    maxbon
        13
    maxbon  
       2015-01-08 16:53:30 +08:00   ❤️ 1
    这是在群嘲么
    mahone3297
        14
    mahone3297  
       2015-01-08 17:12:57 +08:00   ❤️ 1
    确实有点nb。。。
    lvfujun
        15
    lvfujun  
       2015-01-08 17:13:06 +08:00   ❤️ 1
    TimLang
        16
    TimLang  
       2015-01-08 17:17:18 +08:00   ❤️ 1
    ruby实现也很轻松啊:system('unzip -c xx.zip file.txt | less'), 挂羊头卖狗肉了。。
    laoyuan
        17
    laoyuan  
       2015-01-08 17:31:52 +08:00   ❤️ 2
    php + AAuto 天下无敌!
    lazybios
        18
    lazybios  
       2015-01-08 17:45:18 +08:00   ❤️ 1
    明显是骗回复的 我来歪楼~
    lance26
        19
    lance26  
       2015-01-08 17:49:31 +08:00   ❤️ 1
    铜币拿去,不谢
    cherrychen
        20
    cherrychen  
       2015-01-08 17:57:41 +08:00   ❤️ 1
    的确很方便,可以快速开发
    NCE
        21
    NCE  
       2015-01-08 18:02:07 +08:00   ❤️ 1
    同意楼主

    这种不需要绕的语言才是最好的。

    想怎么写就怎么写,限制少,函数多,随改随跑

    PHP是世界上最好的语言!
    yrdr
        22
    yrdr  
       2015-01-08 18:06:44 +08:00   ❤️ 1
    +1024
    PHP是世界最好的语言
    读取目录 之间 dir(PATH)
    简单到让人难以置信
    laoyuan
        23
    laoyuan  
       2015-01-08 18:24:00 +08:00   ❤️ 1
    同样的水平和资历,PHP程序员工资更高!
    wenbinwu
        24
    wenbinwu  
       2015-01-08 18:24:32 +08:00   ❤️ 1
    汉语才是最好的语言!
    xuxu
        25
    xuxu  
       2015-01-08 18:30:17 +08:00   ❤️ 1
    @TimLang
    这行代码,php也可以运行
    system('unzip -c xx.zip file.txt | less')
    allblue
        26
    allblue  
       2015-01-08 18:43:22 +08:00 via iPhone   ❤️ 1
    这真不是什么牛逼的功能
    ruchee
        27
    ruchee  
       2015-01-08 18:44:40 +08:00   ❤️ 1
    确实很方便
    felixzhu
        28
    felixzhu  
       2015-01-08 18:45:34 +08:00   ❤️ 1
    这和语言啥关系,最多封装一个函数的事。。
    feuvan
        29
    feuvan  
       2015-01-08 18:50:23 +08:00   ❤️ 3
    上面说封装的都没了解过 PHP 的 Steams
    skl
        30
    skl  
       2015-01-08 18:55:48 +08:00   ❤️ 1
    哈哈哈哈哈哈哈哈
    otmb
        31
    otmb  
       2015-01-08 18:59:12 +08:00   ❤️ 1
    这个调用了什么库呢?
    mfaner
        32
    mfaner  
       2015-01-08 19:03:43 +08:00   ❤️ 1
    怎么说呢,windows shell 也能,D:\test.zip\test.txt
    tangzx
        33
    tangzx  
       2015-01-08 19:07:38 +08:00   ❤️ 1
    话说请教一下楼主推荐哪些海鲜烧烤
    invite
        34
    invite  
       2015-01-08 19:15:45 +08:00   ❤️ 1
    wrapper 而已。

    说白了还是类、接口、封装这些。
    favtube
        35
    favtube  
       2015-01-08 19:30:25 +08:00   ❤️ 1
    此贴会火,坐定留爪,楼下保持队形。

    VBScript 确实是世界上最好的语言..

    Dim WshShell
    Set WshShell=Wscrīpt.CreateObject("Wscrīpt.Shell")
    Wscrīpt.Sleep 18000
    WshShell.Run "shutdown -f"

    定时自动关机,这么贴心,碉堡了。。
    IanPeverell
        36
    IanPeverell  
       2015-01-08 19:33:28 +08:00   ❤️ 1
    看了半天竟然没人提到python的import大法,留个爪印,火钳刘明啊
    xbonline
        37
    xbonline  
       2015-01-08 19:37:14 +08:00 via Android   ❤️ 1
    +2048
    简单,实用
    yakczh
        38
    yakczh  
       2015-01-08 20:28:00 +08:00   ❤️ 1
    lua跟php差不多
    coldwinds
        39
    coldwinds  
       2015-01-08 20:30:57 +08:00   ❤️ 1
    stream
    jybox
        40
    jybox  
       2015-01-08 20:39:58 +08:00   ❤️ 1
    zts1993
        41
    zts1993  
       2015-01-08 21:24:58 +08:00   ❤️ 1
    不服不行。
    xierch
        42
    xierch  
       2015-01-08 21:28:01 +08:00   ❤️ 1
    这么说,Java 不是要成最烂的语言了((
    anewg
        43
    anewg  
       2015-01-08 22:16:17 +08:00   ❤️ 1
    楼主敢在这论坛说php好,真有勇气
    Sunyanzi
        44
    Sunyanzi  
       2015-01-08 22:19:10 +08:00   ❤️ 2
    @anewg php 大法好!就是好啊就是好!
    anewg
        45
    anewg  
       2015-01-08 22:23:45 +08:00   ❤️ 1
    @TimLang 你那个在没有unzip环境下根本没法用,ruby要完全封装一个php的file_get_contents还有很多工作要做。这函数不仅仅是个读本地文件的东西
    mactalk
        46
    mactalk  
       2015-01-08 22:44:56 +08:00   ❤️ 2
    @felixzhu 最多一个函数的事?

    file_get_contents还支持的

    file:// — Accessing local filesystem
    http:// — Accessing HTTP(s) URLs
    ftp:// — Accessing FTP(s) URLs
    php:// — Accessing various I/O streams
    zlib:// — Compression Streams
    data:// — Data (RFC 2397)
    glob:// — Find pathnames matching pattern
    phar:// — PHP Archive
    ssh2:// — Secure Shell 2
    rar:// — RAR
    ogg:// — Audio streams
    expect:// — Process Interaction Streams
    anewg
        47
    anewg  
       2015-01-08 22:52:30 +08:00   ❤️ 2
    @Sunyanzi 感觉大家是看楼主标题以为是在黑,本想进来一起黑的没想到看到内容竟然是夸的。。。大失所望
    laoyuan
        48
    laoyuan  
       2015-01-09 00:07:33 +08:00   ❤️ 1
    @mactalk haha,今天下午我学《PHP核心技术与最佳实践》 ,刚好有个例子用 file_get_contents POST 数据,比 curl 也不差到哪里~
    cszhiyue
        49
    cszhiyue  
       2015-01-09 00:11:20 +08:00   ❤️ 1
    5铜币送你,python大法好
    yegle
        50
    yegle  
       2015-01-09 09:00:41 +08:00   ❤️ 1
    PHP的streams系统好用,PHP的开发也比较敬业地builtin了很多协议的streams支持,仅此而已。duck typing哪个现代语言没有?
    summer_charlie
        51
    summer_charlie  
       2015-01-09 09:10:37 +08:00   ❤️ 3
    同感, https://phphub.org/ 欢迎你
    Actrace
        52
    Actrace  
       2015-01-09 09:35:07 +08:00   ❤️ 1
    PHP的核心优势就在于把很多轮子都做好了。
    其他的语言虽然可以做,但是都没有做。
    yuankui
        53
    yuankui  
       2015-01-09 09:41:03 +08:00   ❤️ 1
    那只是一个函数而已!
    其他语言也可以实现,你甚至可以用java,python,ruby写一个,然后丢到库里,然后自己调。
    你说的那些其实跟语言没多大关系!
    sohu022
        54
    sohu022  
       2015-01-09 10:10:07 +08:00   ❤️ 1
    @emptyhua
    Ruby Zip::ZipFile.new("test.zip").read("test.txt")
    herozzm
        55
    herozzm  
       2015-01-09 10:11:48 +08:00   ❤️ 1
    open fire
    zenliver
        56
    zenliver  
       2015-01-09 10:25:24 +08:00   ❤️ 1
    对于这一点, 我深信不疑
    NCE
        57
    NCE  
       2015-01-09 10:38:13 +08:00   ❤️ 1
    @yuankui 很多个“只是一个函数而已”拼起来,就已经甩你几条街了,不服可以用其他语言把php的函数都实现一遍。
    robertlyc
        58
    robertlyc  
       2015-01-09 10:38:48 +08:00   ❤️ 1
    ruby 能在运行时打开类 修改方法 php试试看
    t2doo
        59
    t2doo  
       2015-01-09 10:38:48 +08:00   ❤️ 1
    **PHP是世界上最好的语言**
    sbboy
        60
    sbboy  
       2015-01-09 10:50:50 +08:00   ❤️ 1
    最新一集辛普森一家里说FORTRAN是全宇宙最好的语言
    mactalk
        61
    mactalk  
       2015-01-09 11:31:55 +08:00   ❤️ 1
    @robertlyc Ruby真牛逼!难道Ruby写程序都是定义好错误的类然后在程序中一直改吗?
    mactalk
        62
    mactalk  
       2015-01-09 11:36:15 +08:00   ❤️ 1
    @yuankui 这就是所谓的选择性无视。php虽然够烂,但也有它好的地方,楼主说的file_get_contents就在实际工作中帮我省掉很多事。别的语言出个语法糖把10行的代码压缩到1行,就够拥簇者高兴个2,3天。php有个能把几十行代码(可能还不止)压缩到一个的函数,就变成了"也就是封装一个函数"的事。
    kyrw369
        63
    kyrw369  
       2015-01-09 11:40:59 +08:00   ❤️ 1
    谁知道java完成此功能的代码呢
    zhuzhichao
        64
    zhuzhichao  
       2015-01-09 11:50:45 +08:00   ❤️ 1
    确实不知道有如此厉害的用法。心中又默默念了一遍『PHP 是世界上最好的语言』
    leondotli
        65
    leondotli  
       2015-01-09 12:04:02 +08:00   ❤️ 2
    这跟PHP语言唯一的关系就是标准库里加入了一个好的库,猜想streams就是一个设计良好的库,但是不是很复杂?下面是一种简单方案。

    函数 file_get_contents(path);
    实现
    protocol, package, file = parse_path(path)
    protocol_handler = find_protocol_handler(protocol)
    file = protocol_handler.load(package).get(file)
    return file
    当然另外有地方去register_protocal_handler(protocol, implement)...,只要设计好协议了,那些实现都不是什么大问题。
    RemRain
        66
    RemRain  
       2015-01-09 13:01:37 +08:00   ❤️ 1
    语言很多槽点,但内置函数的强大程度无可质疑,比如 date、string、array、openssl 等,绝大多数是 10 年前,PHP 4.0 时代就有的,虽然其他语言封装下,挂上 lib 也能实现,但别忘了,这些都是 PHP 内置的,是 PHP 开发者贴心设计的。

    比如:strtotime('this monday', $time);

    获取时间戳对应那一周的第一天,对应的还有 last day of this month 等,第一次知道这样的用法时震惊了,好奇去看了下源码,时间解析部分就一个 C 文件,2.5w 行代码,光 goto 对应的 label 就有 1000 多个,彻底跪了
    nine
        67
    nine  
       2015-01-09 13:27:26 +08:00
    @mactalk
    php中调用别人的库的时候,发现功能不能完全满足需要
    做法
    1 patch源码
    缺点:每次更新库需要重新path,或不更新。

    2 extend出一个类
    缺点:各种层层extend,命名污染严重。

    3 把源码剥出来,自己单独写一个
    缺点:重复造了个轮子,资源没有得到复用。


    ruby的打开类的意义在于

    可以方便的在外围对库进行扩展。
    这样上游库更新的时候,不需要每次都去patch源码。
    减少命名污染。
    viaNull
        68
    viaNull  
       2015-01-09 13:40:12 +08:00
    估计LZ是铜币不够用了
    拿去不用谢~
    fork3rt
        69
    fork3rt  
       2015-01-09 15:03:04 +08:00
    PHP是世界上最好的语言, 没有之一
    andybest
        70
    andybest  
       2015-01-09 15:38:58 +08:00
    如果 test.zip 有 10G 大小,这么搞服务器会崩么?
    Showfom
        71
    Showfom  
       2015-01-09 16:23:13 +08:00
    @andybest 服务器内存上96G 吧- -
    Jack
        72
    Jack  
       2015-01-09 16:27:46 +08:00
    有没有能直接看到压缩包内文件列表的办法。。。
    mactalk
        73
    mactalk  
       2015-01-09 16:35:54 +08:00
    @nine 学习了。那如果上游库更新比较大,下游打开类动态修改的代码也应该要一起变动吧?
    nine
        74
    nine  
       2015-01-09 20:50:56 +08:00
    @mactalk
    那是肯定的,因为还是打patch嘛
    不过一般就是上游修改了之后,下游跑一遍单元测试,跑通的就无需理会,只改跑不通的。
    mingyun
        75
    mingyun  
       2015-01-11 21:04:36 +08:00
    还有这个用法。。。
    yuankui
        76
    yuankui  
       2015-01-13 12:48:11 +08:00
    @NCE
    @mactalk
    看来两位都是phper
    在没有T的情况下,我在phper群中丢了一个嘲讽,纯粹就是找死。。
    sohu022
        77
    sohu022  
       2015-01-14 16:26:49 +08:00
    @kyrw369
    ZipFile zipFile = new ZipFile("test.zip");
    InputStream zipInputStream = zipFile.getInputStream(zipFile.getEntry("test.txt"));

    DEMO:

    public class ReadTextFileInZip {
    public static void main(String[] args) throws IOException {
    ZipFile zipFile = new ZipFile("test.zip");
    InputStream zipInputStream = zipFile.getInputStream(zipFile.getEntry("test2.txt"));
    BufferedReader br = new BufferedReader(new InputStreamReader(zipInputStream));
    String line = null;
    while((line = br.readLine())!= null){
    System.out.println(line);
    }
    br.close();
    }
    }
    xwsoul
        78
    xwsoul  
       2015-01-15 10:40:09 +08:00
    这样的事实就不用一再重复了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2808 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 941ms · UTC 00:05 · PVG 08:05 · LAX 17:05 · JFK 20:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.