Php 致命错误:无法在中中断/继续1级

Php 致命错误:无法在中中断/继续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

我有一个函数,它必须检查基本的身份验证设置凭据(如果用户存在于文件.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 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))) {
  ...
}
从文档中可以通过引用传递以下内容:

  • 变量,即foo($a)
  • 新语句,即foo(newfoobar())
  • 从函数返回的引用
  • 不应通过引用传递其他表达式,因为结果是 未定义。例如,以下通过引用传递的示例 无效

    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)))) {}