我一直在给任务升级一个旧的PHP Web应用程序,该应用程序是用php 5.2.17编写的,并使用Codeigniter。从 PHP 5.2 升级到 5.6 时,我遇到了一些错误。乍一看,问题可能是使用旧的PHP语法以及Codeigniter的一些问题的混合。我从未使用过Codeigniter,这使得这项任务变得非常困难。 问题发生在一个页面上,您可以在其中编辑患者的一些现有数据,然后提交新的更新数据。几乎是一个克鲁德。
crud 在支持 5.6 PHP>服务器上运行良好,但现在我已经转移到仅支持 5.6 PHP <服务器,我一直遇到这些问题。>
第一个问题:在表单页面上,我收到这两个错误,并且这些变量中的数据不会显示在页面上。如果我决定提交新输入的数据,则新数据也不会保存。
1(尝试获取非对象的属性 2( 未定义的变量:行 页面错误让我知道我的错误发生在以下几行左右:
$anatomic_code = $rows->NerveCode;
$ProxAccess = $rows->ProxAccess;
$DistAccess = $rows->DistAccess;
通过阅读Codeigniter的文档,我被建议使用['']来访问数据,如果我这样做,错误消息"试图获取非对象的属性"消失了,但我仍然有第二个错误,仍然没有看到页面上的数据。
下面是一个更大的代码片段:
<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 文档中向后不兼容的更改:
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
此外,您还可以升级您的代码点火器安装。我不知道您使用的是哪个版本的编码点火器,但您应该下载最新版本并遵循他们的指南:
https://www.codeigniter.com/userguide3/installation/upgrading.html
祝你好运!