houOne
V2EX  ›  PHP

PHP 项目求助,同一份代码 生产环境不报错,本地启动就报错。

  •  
  •   houOne · Sep 8, 2023 · 2997 views
    This topic created in 978 days ago, the information mentioned may be changed or developed.

    PHP5.0 的框架,项目在生产环境 用 ng 部署 同样的代码没有报错,dump($get['type']); 输出了 null 但是我本地环境 就直接抛异常了。 有没有 PHP 的朋友帮忙看看。。

    https://imgse.com/i/pP6CZSH https://imgse.com/i/pP6CnOI

    27 replies    2023-09-09 10:46:22 +08:00
    wmm221166
        1
    wmm221166  
       Sep 8, 2023
    一个 dump($get) 一个 dump($get['type']), 然后 $get 是个 int
    GodlikeKarl
        2
    GodlikeKarl  
       Sep 8, 2023
    你把$get 数组整个打印出来看有没有'type'对应的元素
    abcdexx
        3
    abcdexx  
       Sep 8, 2023
    $get 是个 int 你也把它当数组使用? 你本地和生产环境 php 版本不一样吧? 要先判断 is_array($get)。
    token10086
        4
    token10086  
       Sep 8, 2023   ❤️ 1
    打个断点调试下
    另外建议本地和线上环境一毛一样,建议用 docker 去部署
    https://github.com/zhangjunjie6b/phpdocker
    houOne
        5
    houOne  
    OP
       Sep 8, 2023
    @wmm221166 #1 对的,生产竟然不报错。我看不懂了
    houOne
        6
    houOne  
    OP
       Sep 8, 2023
    生产本地 php7.4 生产应该是 7.2
    garlics
        7
    garlics  
       Sep 8, 2023
    版本问题,线上估计是 5.几的版本,本地估计是 7+的版本。如果版本一样就是错误提示等级不同,需要改配置文件。
    houOne
        8
    houOne  
    OP
       Sep 8, 2023
    使用的是 thinkphp5.0 的框架
    下图是生产环境的输出

    https://imgse.com/i/pP6iiGD
    zjsxwc
        9
    zjsxwc  
       Sep 8, 2023
    盲猜是 php5 碰到 $arr["non-exist-key"] 会返回 null 值,而 php7 碰到这种情况是抛异常。
    houOne
        10
    houOne  
    OP
       Sep 8, 2023
    我是 java 程序员,看到这个诡异的 情况 想请教一下,是不是什么设置让 生产 不抛异常的。
    houOne
        11
    houOne  
    OP
       Sep 8, 2023
    @zjsxwc #9 我本地改 php5 试试看 T T
    houOne
        12
    houOne  
    OP
       Sep 8, 2023
    下了好几个 PHP 版本 试了一下,php7.2 可以了。谢谢各位的热心 [抱拳]
    houOne
        13
    houOne  
    OP
       Sep 8, 2023
    @token10086 #4 请问 PHP 如何像 java 一样 在 IDEA 里面 断点 调试呀? 是使用 PHP xdebug 插件吗?
    shiroyuri
        14
    shiroyuri  
       Sep 8, 2023
    PHPStorm 配置 Xedug 插件
    hello321
        15
    hello321  
       Sep 8, 2023
    php7.4 需要 $get['type'] ?? null
    dilu
        16
    dilu  
       Sep 8, 2023
    线上环境肯定是关掉报错提示了,php.ini 有个 error_reporting 可以控制报什么级别的错误,一般生成环境是全部关掉,开发环境是 warn 起步。
    Rache1
        17
    Rache1  
       Sep 8, 2023
    这个图床,还不能国外访问。。。

    x86
        18
    x86  
       Sep 8, 2023
    thinkphp 本身就可以配置关闭不抛出异常的呀
    dongtingyue
        19
    dongtingyue  
       Sep 8, 2023
    php 环境改成一样的,要不然会有问题测不出来。
    GodlikeKarl
        20
    GodlikeKarl  
       Sep 8, 2023
    可能你的参数有问题,比如要传的 map ,结果传了一个 int 数字
    1wlinesperday
        21
    1wlinesperday  
       Sep 8, 2023
    借楼问一下,帮忙部署一个 PHP 项目多少钱啊 https://secure.phabricator.com/book/phabricator/article/installation_guide/
    taozywu
        22
    taozywu  
       Sep 8, 2023
    @1wlinesperday 可以私聊下 vx:dGFvenl3dQ==
    dayeye2006199
        23
    dayeye2006199  
       Sep 8, 2023 via Android
    朋友 docker 了解一下
    yogogo
        24
    yogogo  
       Sep 9, 2023 via Android
    服务器没有开启异常
    wellerman
        25
    wellerman  
       Sep 9, 2023
    @godloveplay #5 结合顶上两张图片,这代码在本地也不会有预期的结果。$get 本来要接受一个数组,你给传了整数 1127 ($supplier_id ) 当然报错。生产环境之所以没报错,是因为生产环境关闭了错误显示。打开错误显示,肯定一样的错误。 另,#3 楼也已经指出错误原因。
    显示全部错误:
    ini_set('display_errors', true);
    error_reporting(E_ALL);
    qsnow6
        26
    qsnow6  
       Sep 9, 2023
    docker 可以抹平所有环境的差异
    ganbuliao
        27
    ganbuliao  
       Sep 9, 2023
    打印一下生产环境的 php ini 和本地环境的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4432 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 05:31 · PVG 13:31 · LAX 22:31 · JFK 01:31
    ♥ Do have faith in what you're doing.