【问题标题】:PHP 5.2 app using Codeigniter upgrade to 6.7使用 Codeigniter 的 PHP 5.2 应用程序升级到 6.7
【发布时间】:2019-02-06 08:47:04
【问题描述】:

我的任务是升级一个用 php 5.2.17 编写并使用 Codeigniter 的旧 PHP Web 应用程序。从 PHP 5.2 升级到 5.6 时,我遇到了一些错误。乍一看,问题可能是使用旧的 PHP 语法以及 Codeigniter 的一些问题的混合。我从未与 Codeigniter 合作过,这使这项任务变得异常困难。 问题出现在一个页面上,您可以在该页面上编辑患者的一些现有数据,然后提交新的更新数据。几乎是一个 CRUD。
crud 在支持 > 5.6 PHP 的服务器上运行良好,但现在我已经转移到仅支持

第一个问题:在表单页面上出现这两个错误,并且这些变量中的数据没有显示在页面上。如果我决定提交新输入的数据,新数据也不会保存。

1) 试图获取非对象的属性 2)未定义的变量:行 页面错误让我知道我的错误发生在以下几行:

        $anatomic_code = $rows->NerveCode;
        $ProxAccess = $rows->ProxAccess;
        $DistAccess = $rows->DistAccess;

通过阅读 Codeigniter 的文档,我被建议使用 [''] 来访问数据,如果我执行错误消息“尝试获取非对象的属性”就会消失,但我仍然有第二个错误并且仍然看不到页面上的数据。

这是一个更大的sn-p代码:

<div id="wrapper"> 
    <?

    $exam_id = $this->uri->segment(3);
    $struct_id = $this->uri->segment(4);   
    $struct_type = $this->uri->segment(5);
    $tech_id = $this->uri->segment(6);
    $test_id = $this->uri->segment(7);
    $TechName = $query_tech_type->row();
    $side = $query_side->row();

    //Update form
    $hidden = array(
        'Exam' => $exam_id,
        'Struct_id' => $struct_id,
        'Structure_type' => $struct_type,
        'Tech_id' => $tech_id,
        'Test' => $test_id
    );
    ?>

    <a href="<? echo site_url("auh/show_ind_patient/".$exam_id.""); ?> "><img src="<? echo base_url() . "public/holder/back.png"; ?>" border="0" title="Back to test page"></a>

    <?
    echo form_open("auh/update_enkel_test_values/","", $hidden);

    echo "<h2>" . $TechName->Tech_name . "</h2>";

    echo "<div id=\"tech_no\" style=\"display:none\">".$tech_id."</div>";

    if ($struct_id == "1"){
            foreach($query->result() as $rows):
                echo "<h3>M." . $rows->MuscleName . ") (" . $side->SideText.")</h3>";
            endforeach;
            $anatomic_code = $rows->MuscleCode; 
    }

    elseif ($struct_id == "2") {

            foreach($query->result() as $rows): 
                echo "<h3>N." . $rows->NerveName . ") (" . $side->SideText.")</h3>";
            endforeach;
            $anatomic_code = $rows->NerveCode; 
    }

    elseif ($struct_id == "3") {

            foreach($query->result() as $rows):
            if ($rows->NerveCode > 10000 ){
                echo "<h3>N." . $rows->NerveName . ") (" . $side->SideText.")</h3>";        

            }
            else {
                echo "<h3>N." . $rows->NerveName . " (" . $rows->ProxName . " - ";
                    if ($rows->Code < 3000) {
                        echo "m.";
                        }
                    echo $rows->DistName . ") ("  . $side->SideText.")</h3>";
            }
            endforeach;
            $anatomic_code = $rows->NerveCode;
            $ProxAccess = $rows->ProxAccess;
            $DistAccess = $rows->DistAccess;
    }

    elseif ($struct_id == "4"){ 
            foreach($query->result() as $rows):
                $anatomic_code = $rows->NerveCode;
                if ($rows->NerveCode > 10000 ){
                    echo "<h3>" . $rows->NerveName . " (". $side->SideText .")</h3>";    
                }
                else{
                    echo "<h3>N." . $rows->NerveName . " - m." . $rows->MuscleName . " (". $side->SideText .")</h3>";
                }
            endforeach;
    }

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    查看 PHP 文档中向后不兼容的更改:

    https://secure.php.net/manual/en/migration53.php

    https://secure.php.net/manual/en/migration54.php

    https://secure.php.net/manual/en/migration55.php

    https://secure.php.net/manual/en/migration56.php

    遍历其中的每一个,并通过您的代码库进行查找和替换。然后你会在5.6。但不要停在那里! ;-)

    https://secure.php.net/manual/en/migration70.php

    https://secure.php.net/manual/en/migration71.php

    https://secure.php.net/manual/en/migration72.php

    您会发现每次后续升级都需要更改的内容越来越少。 5.2 到 5.3 和 5.4 可能涉及的工作最多。

    您应该尝试使用 7.2 版本,原因是 5.6 目前仅在开发安全修复程序,并且从 2019 年 1 月 1 日起不再受支持。请在此处查看此链接:

    https://secure.php.net/supported-versions.php

    此外,您可以升级您的 Codeigniter 安装。我不知道您使用的是哪个版本的 codeigniter,但您应该下载最新版本并按照他们的指南进行操作:

    https://www.codeigniter.com/userguide3/installation/upgrading.html

    祝你好运!

    【讨论】:

    • 感谢您的意见!但是,如果错误出现在 Codeigniter 框架中,按照上述步骤将无法解决问题,还是我错了?再次感谢您的帮助。
    • 您使用的是哪个版本的 codeigniter?我已经添加了 codeigniter 升级指南的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多