将CakePHP网站升级到PHP7
我已经接管了一个为PHP5.4和Cake2.x编写的网站。我将PHP升级到7.2,将Cake升级到2.10。现在没有人可以登录。我开始调试,但我觉得自己像掉进了兔子洞。在将CakePHP网站升级到PHP7,php,cakephp,basic-authentication,Php,Cakephp,Basic Authentication,我已经接管了一个为PHP5.4和Cake2.x编写的网站。我将PHP升级到7.2,将Cake升级到2.10。现在没有人可以登录。我开始调试,但我觉得自己像掉进了兔子洞。在FormAuthenticate::authenticate(CakeRequest$request,CakeResponse$response)中是语句$fields=$this->settings['fields']之后我添加了$ex=fopen('php://stderr","a",; fputs($ex,“fields=
FormAuthenticate::authenticate(CakeRequest$request,CakeResponse$response)
中是语句$fields=$this->settings['fields']代码>之后我添加了$ex=fopen('php://stderr","a",;
fputs($ex,“fields=”.json_encode($fields)。“\n”)代码>哪个输出
fields={"username":"username","password":"password"}
而不是我在网页上输入的实际用户名和密码。我尝试用实际用户名和密码重新分配字段
,但函数调用方法\u checkFields
,该方法调用$request->data
,返回空字符串
显然,我在这里采取了错误的方法。我在升级过程中做错了什么,或者遗漏了什么;不仅仅是更改composer.json
和运行composer更新
。有什么建议吗?我通过将CakePHP降级到2.9.9版解决了这个问题。字段选项不包含任何用户数据,它是一个定义表单数据和数据库中字段名称的映射,请参阅。因此,如果表单和数据库字段的名称分别为username
和password
,则不要使用该选项,而是使用默认值。如果$request->data
为空(我假设它实际上不是一个字符串,因为当它作为数组被访问时会产生一个错误-请确保启用了调试模式和错误报告),那么这就是您的问题,但这可能是由很多事情引起的(重定向、不发送数据、覆盖/删除数据等),这里的任何人都几乎不可能知道,您必须进行更多的调试以确定数据丢失的位置。Cake 2使用了PHP7.2中默认不支持的mcrypt,无论是使用PHP7.1还是安装mcrytI,我真不敢相信我必须对一个相当成熟的包进行这种低级调试。无论如何,我调试过。mcrypt已经安装,所以不是这样,但是谢谢你的建议,Nathaniel。$request->data()
调用CakeRequest::data()
,它返回(通过final语句)Hash::get($this->data,$name)
。最终返回$default
,即null
。所以想必$data
应该有一个键User
,但它没有。所以我想我必须弄清楚$request->data
如何不包含键User
。我刚刚删除了供应商/(是的,由于某种原因,它是Vendor/在这个应用程序中)和composer重新安装。现在,在Hash::get中,$data={“user”:null}
和$path='user.email'
后面跟着$data={“user”:null}
和$path='user.password'