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

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

  •  
  •   godloveplay · 232 天前 · 1953 次点击
    这是一个创建于 232 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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