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

PHP 底层为什么会这么脆弱?

  •  
  •   thankyourtender · 2014-11-11 22:39:26 +08:00 · 8728 次点击
    这是一个创建于 3689 天前的主题,其中的信息可能已经有所发展或是发生改变。
    bug本身修不完,扩展经常维护的已经不多了。

    很多关键性的东西都处于能用,但不是高性能的状态。
    比如socket,eventLoop。

    看changeLog很多都是以往留下的bug.

    总觉得不够专业。
    61 条回复    2014-11-27 14:16:48 +08:00
    em70
        1
    em70  
       2014-11-11 22:58:52 +08:00 via Android
    php鲁棒性很好啊,随便写的程序,不需专门优化,性能都不差的。
    txlty
        2
    txlty  
       2014-11-11 23:00:44 +08:00   ❤️ 1
    “比如socket,eventLoop”

    用 Swoole、pthreads 。
    xing393939
        3
    xing393939  
       2014-11-11 23:04:15 +08:00 via iPhone
    @em70 php鲁棒是啥?
    thankyourtender
        4
    thankyourtender  
    OP
       2014-11-11 23:04:33 +08:00
    你们看最近bug修复的changelog
    vibbow
        5
    vibbow  
       2014-11-11 23:05:29 +08:00
    PHP本身就不是为高性能而生的啊。
    要高性能的,干嘛要选解释性语言?
    t6attack
        6
    t6attack  
       2014-11-12 00:09:39 +08:00   ❤️ 1
    php的相关扩展、技术,大多是php大牛们为了解决自身需要弄出来的。比如facebook发现php承受几千亿pv很吃力,于是就有了HipHop for PHP (HHVM)。而在这之前根本没人做这事儿。
    如果某个扩展大牛自己不用了,用的人也很少了,自然就不更新了。
    比如socket,印象里从php4开始就没更新过。用的人也很少。很好奇你用socket干嘛?
    em70
        7
    em70  
       2014-11-12 01:04:51 +08:00
    @xing393939 鲁棒是Robust的音译,也就是健壮和强壮的意思。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性----------百度百科
    lincanbin
        8
    lincanbin  
       2014-11-12 02:59:57 +08:00 via Android
    做大了就这样,默认就有1500个函数,不需要import就可以直接用的那种。
    这1500函数分由许多人完成,单元测试也是自己做,出些bug也正常,而且出bug的地方一般也是用的人少的地方,其他语言也都有,就是没这么实诚,不写出来。
    像微软的补丁其实也有一些是修自己的bug的,但是写log就写作提升系统稳定性与性能。程序员好多都这样,产品说你这有bug,打死不认,commit修bug的时候就糊弄了点东西上去。
    lincanbin
        9
    lincanbin  
       2014-11-12 03:11:16 +08:00 via Android
    而且拓展能用的话也没必要经常更新啊,像Python的MySQLdb。
    另外帖子标题本身就是错误的,PHP的底层稳定性非常高,目前是顶级水平。
    到了什么程度呢,未定义变量,错误的类型推导等等,关掉错误提示照样跑。也就是常说的鲁棒性强。
    性能上也还过得去啊,我写了个PHP论坛,在4美元的vps上跑,单看压力测试结果已经可以轻易承受上千万的日PV了。
    mjar
        10
    mjar  
       2014-11-12 08:25:28 +08:00
    @xing393939 鲁棒性这个词是译者偷懒了,完全跟原意无关的字面。
    invite
        11
    invite  
       2014-11-12 08:35:54 +08:00
    @lincanbin 求相关软件的优化配置。
    thankyourtender
        12
    thankyourtender  
    OP
       2014-11-12 09:07:18 +08:00
    @t6attack socket在不用其他语言,压力要求不大的情况下,一直有人在用。 因为我有看到,自己也稍微的使用过。
    thankyourtender
        13
    thankyourtender  
    OP
       2014-11-12 09:09:53 +08:00
    @lincanbin  容错率是非常高的,这语言。

    就是1500个函数,还由不同的人维护,不常用的就掉坑了。

    总觉得没有像Java等企业级技术一样安全有保障。
    tabris17
        14
    tabris17  
       2014-11-12 09:25:24 +08:00
    出bug的地方都是用的人少的地方,其实PHP已经算好的了。生产环境中要到的东西,如果有坑已经有前辈趟过去了
    tang8888
        15
    tang8888  
       2014-11-12 09:33:45 +08:00
    nojejs 在这些方面做的更好.可以试试.
    yakczh
        16
    yakczh  
       2014-11-12 10:09:15 +08:00
    http://www.geek521.com/?p=8131

    php的socket扩展 swoole 性能是Node.js的12倍
    aliang032
        17
    aliang032  
       2014-11-12 10:27:41 +08:00
    比如http://wwww.workerman.net,用php底层socket写的服务器,性能很强悍啊

    socket,eventLoop
    可以用 swoole、libevent、libev ,这些都是非常牛的东西
    lincanbin
        18
    lincanbin  
       2014-11-12 10:49:23 +08:00
    @thankyourtender 毕竟不要钱,跟openssl类似,开源组织都不太好混。还有历史包袱,又不可能像Python一样直接出个Python3扔掉所有历史包袱,如果这样做就离死不远了。
    @invite 哪来什么优化配置?
    @vibbow web开发有几家网站不是用解释型的?
    tang8888
        19
    tang8888  
       2014-11-12 10:58:00 +08:00
    java .net做web不用解释,直接编译,效率高,速度快,建议选这两个.
    mhycy
        20
    mhycy  
       2014-11-12 11:07:40 +08:00
    @lincanbin 同感...我们现在在维护的系统要是开错误提示的话估计没法跑.....
    lincanbin
        21
    lincanbin  
       2014-11-12 11:17:15 +08:00
    @mhycy 开发应该从初期就开最高级别的错误提示
    就像这样
    https://github.com/lincanbin/Carbon-Forum/blob/master/common.php
    mhycy
        22
    mhycy  
       2014-11-12 12:10:18 +08:00
    @lincanbin 我们公司各种不规范....给别人擦屁股越做越烂....囧
    mhycy
        23
    mhycy  
       2014-11-12 12:12:00 +08:00
    @lincanbin 顺带,服务器/防火墙甲方提供,配置他们做...还不提供参数.....
    很奇葩的甲方.......
    pandada8
        24
    pandada8  
       2014-11-12 12:23:01 +08:00
    lincanbin
        25
    lincanbin  
       2014-11-12 12:33:57 +08:00
    @mhycy 这个不是问题吧,PHP不是汇编,如果正常编写的话是隔离底层的。
    照着规范做就能跨系统、跨版本地跑。
    mhycy
        26
    mhycy  
       2014-11-12 13:06:37 +08:00
    @lincanbin 防火墙会拦截参数,规则还没全部试出来....囧
    PHP不能随便跨版本,5.0以后有很多细节有所不同,系统大了就不敢变了.
    如果说编码规范的话,04年到现在就是没有规范......囧
    我们现在为了避免测试环境能用实际不能用都在正式服务器上做调试.
    Actrace
        27
    Actrace  
       2014-11-12 13:38:18 +08:00
    楼主所说的底层到底是哪个部分的底层?
    ioth
        28
    ioth  
       2014-11-12 14:07:49 +08:00
    @Actrace 他也没懂。
    php比java强太多了,java开发成本这么高。
    towser
        29
    towser  
       2014-11-12 14:17:39 +08:00
    底层非常坚挺,写的乱七八糟也能顺利跑通。不然能有那么多php爱好者。
    thankyourtender
        30
    thankyourtender  
    OP
       2014-11-12 14:40:10 +08:00
    @mhycy PHP的兼容性应该是非常好的,升级都会有提示方案的,这个个人觉得比很懂语言都好..
    justplaymore
        31
    justplaymore  
       2014-11-12 14:41:14 +08:00
    reactphp, guzzle
    thankyourtender
        32
    thankyourtender  
    OP
       2014-11-12 14:42:57 +08:00
    @Actrace 对语言语法的修补,函数的完整性,插件扩展的安全性这些...
    thankyourtender
        33
    thankyourtender  
    OP
       2014-11-12 14:44:11 +08:00
    @towser 这个同意,就是PHP的优势
    mhycy
        34
    mhycy  
       2014-11-12 15:00:30 +08:00
    @thankyourtender 数十个站点,数十万行代码,不是说改就改的.
    另一个运维单位一直想让我们升级.....囧
    (他们管服务器的,换机器换系统好弄钱,但是甲方不愿意给我们升级资金)
    一个从PHP 4.x维护到现在的系统外加不规范编码的坑...改不如重写...囧
    kurtzhong
        35
    kurtzhong  
       2014-11-12 15:22:22 +08:00   ❤️ 1
    "鲁棒性"(robustness)是一個我一聽到就渾身雞皮疙瘩的詞,說"健壯性"不行嗎。。。
    ffffwh
        36
    ffffwh  
       2014-11-12 15:25:45 +08:00
    @xing393939
    不是撸棒咩。。。
    Actrace
        37
    Actrace  
       2014-11-12 15:26:32 +08:00
    @thankyourtender PHP的容错已经做得比其他语言好很多了啊.
    thankyourtender
        38
    thankyourtender  
    OP
       2014-11-12 15:52:03 +08:00
    http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
    看了确实,很多pecl都没人更新。
    内部engine更新了也无法摆脱他是一个屌丝语言
    sarices
        39
    sarices  
       2014-11-12 16:22:06 +08:00
    呵呵,怎么就没人吐槽shell呢
    thankyourtender
        40
    thankyourtender  
    OP
       2014-11-12 16:26:52 +08:00
    @sarices shell都这么多年了,不怎么清楚,应该没什么大问题。GNU的
    vibbow
        42
    vibbow  
       2014-11-12 17:37:37 +08:00
    @lincanbin Java?
    wezzard
        43
    wezzard  
       2014-11-12 17:49:13 +08:00
    擼棒性才是正確的翻譯。
    abscon
        44
    abscon  
       2014-11-12 19:06:20 +08:00 via Android
    @lincanbin 开源不是劣质的理由。

    同样是开源,OpenSSH怎么没有OpenSSL那么多漏洞呢?
    bigwang
        45
    bigwang  
       2014-11-12 19:22:43 +08:00   ❤️ 1
    socket,eventLoop 根本不是php 所需要的

    php做web很方便,非要抱怨

    还不如吐槽 变量 $, 指针 ->,以及缺乏 数组 slice 特性
    mfaner
        46
    mfaner  
       2014-11-12 19:29:08 +08:00
    @lincanbin "像微软的补丁其实也有一些是修自己的bug的,但是写log就写作提升系统稳定性与性能。" 给个链接看看吧,不然总觉得没法相信
    lincanbin
        47
    lincanbin  
       2014-11-12 19:38:16 +08:00
    @abscon Bug的出现是偶然性的,并不是人工制造。
    另外我也说了,Python等其他编程语言也有大量Bug,不过他们从不在ChangeLog中写出来。
    lincanbin
        48
    lincanbin  
       2014-11-12 19:42:54 +08:00
    @mfaner 这些多了去了,你现在就可以去看看今天微软补丁的更新日志,看看他们的写作风格和PHP项目组的写作风格。
    Win8以前有个会导致整个系统卡住连任务管理器都无法唤出的BUG,只能重启。
    更新日志是这样写的:稳定性和性能改进。
    9999999999999999
        49
    9999999999999999  
       2014-11-12 19:49:33 +08:00
    我以为楼主把FACEBOOK黑掉了
    pandada8
        50
    pandada8  
       2014-11-12 20:46:25 +08:00
    lincanbin
        51
    lincanbin  
       2014-11-12 21:06:32 +08:00
    @pandada8 哦,原来还是写了出来的,没和PHP一样把修复了什么BUG放在首页。
    这个链接就很好地说明了题目本身是错的,基本所有语言本身都有BUG(实际上有哪个大点的项目没出过BUG?),楼主专门把PHP拿出来说不知道是为什么。
    abscon
        52
    abscon  
       2014-11-12 22:27:06 +08:00 via Android
    @lincanbin 不是“有无”的问题,是“多少”。楼主是惊诧于PHP的流行程度和其实现质量之间的反差。你的说法就像考60分的同学嘲笑人家95分的:你看,你不也做错题目了吗?

    其实PHP内部怎样我也不清楚。但是这么一个语言直到今年才出语言规范。这么不严肃,被人鄙视也怨不得谁。
    lincanbin
        53
    lincanbin  
       2014-11-12 22:38:21 +08:00 via Android
    @abscon PHP不需要import就能用的函数有1500个,出bug的概率已经是不能再低了。
    规范老早就有,随着版本推进一直在改而已,PHP现在也可以跳出来搞个像Python3一样的语言,扔掉所有历史包袱,可是这是不可能的。
    Lucups
        54
    Lucups  
       2014-11-12 22:46:36 +08:00
    @mjar 一直觉得“鲁棒”是翻译的最好的词之一,嘿嘿嘿(猥琐地笑)

    稳不稳,要撸撸才知道 :)
    awanabe
        55
    awanabe  
       2014-11-12 23:16:59 +08:00
    又要引发圣战的感觉啊... php/java/python 看样子都扯进来了..
    poporange630
        56
    poporange630  
       2014-11-13 03:23:36 +08:00 via Android
    invite
        57
    invite  
       2014-11-13 09:05:59 +08:00
    @lincanbin 4美元的vps,上千万的日PV,求相关配置。
    thankyourtender
        58
    thankyourtender  
    OP
       2014-11-13 09:12:05 +08:00
    @lincanbin bug不写在changeLog, 这是什么态度....
    thankyourtender
        59
    thankyourtender  
    OP
       2014-11-13 09:18:15 +08:00
    @lincanbin 就是说有些Bug是在extension里的,有些是本身语言变量object这些做的不够完善,修来修去又出现新的bug,所以我在怀疑和思考这种做法的可靠性。当然Python,RUby的应该也差不多。
    thankyourtender
        60
    thankyourtender  
    OP
       2014-11-13 09:25:23 +08:00
    @abscon 其实PHP的历史上有好多fail,但是不会轻易出现像PY3这样的失误。
    pear,phar等,其实都推广的不好。
    除非像go一样直接把语法写法都写在编译器解析器里面
    thankyourtender
        61
    thankyourtender  
    OP
       2014-11-27 14:16:48 +08:00
    看到源代码一直在更新,一直有新的东西加入,还是有活力的,非常可贵的是 认真
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3165 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 12:55 · PVG 20:55 · LAX 04:55 · JFK 07:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.