Php 致命错误:无法在中中断/继续1级
我有一个函数,它必须检查基本的身份验证设置凭据(如果用户存在于文件.htgroup中),并从文件.htpasswd中检查其密码,如果不匹配,则返回0;如果匹配,则返回1Php 致命错误:无法在中中断/继续1级,php,Php,我有一个函数,它必须检查基本的身份验证设置凭据(如果用户存在于文件.htgroup中),并从文件.htpasswd中检查其密码,如果不匹配,则返回0;如果匹配,则返回1 $password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; $user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : ''; function authe
$password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
$user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
function authenticate($user, $password) {
$AuthUserFile = file(".htpasswd");
$AuthGroupFile = file(".htgroup");
$group = "Members";
if(!preg_grep("/$group: $user$/", $AuthGroupFile)) {
if(!($authUserLine = array_shift(preg_grep("/$user:.*$/", $AuthUserFile)))) {
preg_match("/$user:((..).*)$/", $authUserLine, $matches);
$authPW = $matches[1];
$salt = $matches[2];
$submittedPW = crypt($password, $salt);
if($submittedPW != $authPW) { return 0; } else { return 1; };
} else { return 0; };
}else { return 0; };
}
我在if(!($authUserLine=array\u shift(preg\u grep(“/$user:.*$/”,$AuthUserFile)){
怎么了?数组\u shift需要将第一个参数作为引用传递,因为它需要更新传递的数组并删除第一个元素 为了使其工作,您需要将preg\u grep的结果存储在一个变量中:
$matches = preg_grep("/$user:.*$/", $AuthUserFile);
if(!($authUserLine = array_shift($matches))) {
...
}
从文档中可以通过引用传递以下内容:
array\u shift
是唯一的参数,它是通过引用传递的数组。$AuthGroupFile
的返回值没有任何引用。因此出现错误。您应该先将生成的preg\u grep(“/$user:.*$/”,$AuthUserFile)
存储到$pregGrap
变量。然后使用array\u sift()
用于参考
最终代码如下所示:
if(!($authUserLine = array_shift(preg_grep("/$user:.*$/", $AuthUserFile)))) {}
如果没有传入变量,那么就没有可指向的引用
谢谢
if(!($authUserLine = array_shift(preg_grep("/$user:.*$/", $AuthUserFile)))) {}