继承了一个运行有计算器形式的网站,该网站在主机将服务器从5.6更新到PHP7.2时中断。查看错误日志,问题似乎在于将$ data正确传递给函数。
我得到的错误是
PHP致命错误:未捕获的ArgumentCountError:函数CalculateTitleFee()的参数太少
它表示正在获取1个参数,但预期为2。在我的浏览器中,我可以看到URL上的500错误,该错误清楚地显示了2个数据值。
我最初的猜测是GET无法正常工作,或者无法将数据正确构建到数组中。
这是有问题的PHP。
这一切都始于:
$action = $_GET['action'];
$json_data = array();
$json_data['error_code'] = '0';
// Determine the action that the javascript is attempting to perform
switch ($action) {
case "display_main_menu":
case "back":
$json_data['html'] = display_main_menu();
break;
case "display_purchase_example":
$json_data['html'] = display_purchase_example();
break;
case "display_refinance_example":
$json_data['html'] = display_refinance_example();
break;
case "calculate":
$post_data = $_GET['data'];
$json_data['calc_data'] = calculate($post_data);
break;
}
echo json_encode($json_data);
然后发送表格:
urltophp.php?action=calculate&data%5B%5D=80000&data%5B%5D=90000
这是计算功能:
function calculate($data) {
$calc_data = array();
$title_premium = CalculateTitleFee(floatval($data[1])) + CalculateLoanPolicy(floatval($data[0]));
$title_premium_refi = CalculateTitleFeeRefi(floatval($data[0]));
}
该函数发生了很多事情,我没有复制,但是发生了CalculateTitleFee()函数错误。希望能够解决该问题,并使其他所有功能正常运行。
=====更新=====
这是CalculateTitleFee函数。
function CalculateTitleFee ($purchase_price, $loan_amount){
$title_premium0 = 0;
if ($purchase_price <= "100000") {
$title_premium0 = ((ceil((($purchase_price-30000)*0.00375)+180)-(ceil((($purchase_price-30000)*0.00325)+150)))+100);
}
else if ($purchase_price <= "200000") {
$title_premium0 = ((ceil((($purchase_price-100000)*0.00275)+442.5)-(ceil((($purchase_price-100000)*0.00225)+377.5)))+100);
}
else if ($purchase_price <= "300000") {
$title_premium0 = ((ceil((($purchase_price-200000)*0.002)+717.5)-(ceil((($purchase_price-200000)*0.00175)+602.5)))+100);
}
else if ($purchase_price <= "10000000") {
$title_premium0 = ((ceil((($purchase_price-200000)*0.002)+717.5)-(ceil((($purchase_price-200000)*0.00175)+602.5)))+100);
}
return $title_premium0;
}
答案 0 :(得分:3)
这不是因为pytest-json
。这始终是一个问题,但是在您更新到PHP 7时才开始引发异常。用于触发警告的参数太少了as of PHP 7.1 it causes an error。
在$_GET
函数中,您仅用一个参数调用calculate()
。
CalculateTitleFee
CalculateTitleFee(floatval($data[1]))
确实有第二个参数,但是该函数从未使用过。从函数定义中删除该参数应该是安全的。