【问题标题】:Laravel Deprecated Error: idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecatedLaravel 已弃用错误:idn_to_ascii(): INTL_IDNA_VARIANT_2003 已弃用
【发布时间】:2020-04-23 10:56:43
【问题描述】:

我的 Laravel 版本是 6。

我的注册表单不能在实时服务器上运行,但它在 localhost 上运行良好。

当我点击注册按钮时,它会抛出这个异常。

idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated

它指向我在第 114 行的RegisterController.php

$this->validator($request->all())->validate();

这行 vendor/guzzlehttp/guzzle/src/Utils.php:35

? idn_to_ascii($uri->getHost(), $options)

RegisterController.php

class RegisterController extends Controller
{
    use RegistersUsers;

    protected $redirectTo = RouteServiceProvider::HOME;

    public function __construct()
    {
        $this->middleware('guest');
    }

    protected function validator(array $data)
    {
        $validator = Validator::make($data, [
            'register_name' => ['required', 'string', 'max:8'],
            'register_email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'],
            'register_password' => ['required', 'string', 'min:8', 'confirmed'],
            'user_type'=> ['required','in:user,company'],
            'g-recaptcha-response' => ['required','captcha'],

        ]);
        $validator->setAttributeNames([
            'register_email' => 'email',
            'register_password' => 'password',
        ]);

        return $validator;
    }
    protected function create(array $data)
    {
      $user = User::create([
          'name' => $data['register_name'],
          'email' => $data['register_email'],
          'password' => Hash::make($data['register_password']),
          'user_type' =>$data['user_type'],

      ]);

      $user->sendEmailVerificationNotification();

      return $user;
    }

    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
            ?: redirect()->intended($this->redirectPath());
    }

}

【问题讨论】:

  • 这是做什么的? $this->validator($request->all())->validate();能不能展示整个控制器方法
  • @lewis4u 感谢您的宝贵时间。我刚刚更新了我的问题。请刷新查看我的控制器代码
  • @lewis4u 有什么更新吗?
  • 也许您可以将 Guzzle 稍微更新到下一个版本?
  • 哦,看来您使用了错误的请求类。检查使用声明以确保您的请求来自use Illuminate\Http\Request;

标签: php laravel


【解决方案1】:

我的服务器上有 php7.3。我遇到了同样的错误。 但是,快点,我解决了我的问题。

当我们使用这个命令在我们的 Laravel 应用中安装 guzzle 时

composer require guzzlehttp/guzzle

它安装的 guzzle 版本低于 ^7。 为了解决这个问题,我们需要最新的 guzzle 版本,在撰写本文时是 ^7.0。

所以,有办法。

在服务器上编辑您的 composer.json 文件。 并像这样更新您的 guzzle 版本。

"guzzlehttp/guzzle": "^7.0",

然后在您的服务器终端上运行该命令。

composer update

就是这样。

如果你的电脑没有连接服务器 ssh,你可以更新你的本地项目并重新上传整个供应商目录。

【讨论】:

  • 我遇到了同样的问题。我按照您的建议更新了我的 guzzle 版本,但仍然收到相同的错误:(
  • @Mohit - 服务器上的 php 版本是什么?
  • 服务器上是 7.3,我的本地系统上是 7.4。
  • 你使用的是 Laravel 版本 7.* 吗?
  • 是的,我刚刚查过了。 Laravel 版本是 7.9.2
【解决方案2】:

问题的原因很简单:

PHP 版本之间的不匹配,在您的本地开发机器上,您的 PHP 版本可能与服务器上的不同!

【讨论】:

  • 此错误与 PHP 7.2 版本有关。我已经知道了。我将我的 xampp 升级到 PHP 7.4,然后在具有版本 7.3 的实时服务器上重新导入项目。它仍然没有修复。
  • 在部署我的项目之前,我还需要在本地服务器上做些什么吗?
【解决方案3】:

已解决

我遇到了同样的问题:在本地 Windows pc php 7.2.30 上,guzzle 6.5.3 工作正常。但是服务器上的相同版本会以确切的行号引发上述错误。降级 guzzle 6.5.2 解决了服务器上的问题。 我怀疑双方的国际行为可能会有所不同。

本地机器上的intl:

version | 1.1.0
-- | --
ICU version | 64.2
ICU Data version | 64.2
ICU TZData version | 2019a
ICU Unicode version | 12.1

服务器上的国际化:

version | 1.1.0
-- | --
ICU version | 4.2.1

【讨论】:

    猜你喜欢
    • 2023-02-16
    • 2014-02-12
    • 1970-01-01
    • 2012-07-03
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    相关资源
    最近更新 更多