自从过去两天我面临非常奇怪的问题,我有两个不同的服务器,一个是Windows(php v5.3),第二个是linux(php v7.1 ngnix)。我有一个项目(由某人编写)已经在Windows服务器上运行,现在我必须在linux服务器上移动这个项目(没有代码更改)。我的问题,有一个登录功能 -
Function userAuthentication($username,$password,$locationId,$url,$source)
{
....
}
它正在调用(在Windows服务器上)
userAuthentication($username, $password,'',$url) ;
我知道参数在这种情况下是不匹配的,但是在我测试的时候,这段代码实际上给了我结果并且在windows上运行正常但是同样的代码在Linux服务器上给了我明显的错误 -
ArgumentCountError:函数参数太少 身份验证:: userAuthentication(),4传入
可以通过更改代码来解决这个问题,但我不想要(可以使用相同的错误进行多项功能)。 我已经谷歌搜索但没有找到任何东西。我很好奇,为什么这不会发生在Windows上。是特定于ArgumentCountError服务器还是Windows服务器没有像linux,php版本或任何其他配置那样关键。我想解决这个问题的方法。?
任何人都有任何想法请帮助我,谢谢
答案 0 :(得分:3)
环境(Windows与Linux)之间的差异不是PHP版本。
正如您在从PHP 7.0到7.1(链接:http://php.net/manual/en/migration71.incompatible.php)
的迁移中所看到的投掷过少的函数参数
以前,会发出警告以调用用户定义的 参数太少的函数。现在,这个警告已被提升 到错误异常。此更改仅适用于用户定义 功能,而不是内部功能。例如:
<?php
function test($param){}
test();
以上示例将输出类似于:
的内容致命错误:未捕获ArgumentCountError:参数太少 函数test(),0在行%d上的%s中传递,在预期中恰好为1 %S:%d
如何解决?
您必须定义函数中的所有参数。它可能会“不舒服”#34;但作为开发人员,这是一种更好的做法。不要在这个问题上保持懒惰。
答案 1 :(得分:1)
这与更新的PHP版本有关,因为他们应该对调用更加严格。如果您希望再次使用此选项,请通过为其提供默认值来使其他参数可选。
您应该在本地更新到7.x以防止出现此类问题。
像:
ply