mews/captcha 图片验证码代码可以。 captcha_src 可以返回图片地址。 返回的地址去请求为 200. 但是就是没有图片。请问如何解决这个问题?

问答 Yu ⋅ 于 4个月前 ⋅ 最后回复由 Carl0v0 1天前 ⋅ 879 阅读

https://laravel-china.org/topics/7718/using-the-mewebstudiocaptcha-package-the-authentication-code-does-not-display#reply42404
跟这个遇到的情况一模一样。
助教的回答毫无作用。

库按照GitHub上的步骤接入的。
接入成功的证明就是
captcha_src('flat')
返回的下面这这样的URL。
http://xxx.test/captcha/flat?ztpYdOXd
然后这个URL请求的是200返回。
但是这个URL得不到一张img

本文章首发在 Laravel China 社区
最佳答案
  • @Yu

    指定路径增加相应位置增加这个函数。

    在生成图片前加上ob_clean(),清除图片缓存就好了

    ob_clean();

    file

    4个月前
回复数量: 24
  • 建议

    http://larabbs.test/captcha/flat?MugoJtaN

    还是请再次检查一下代码吧。我这边也是可正常使用的、

    你Git 撤回到上一个步骤、重新再操作一遍试试、环境务必一致 :wink:

    4个月前
  • @Summer 重新编辑自己评论的时候 : 不会自动提示表情~

    4个月前
  • 是不是img 标签写错了 ? 你这个应该把具体代码贴出来

    4个月前
  • PHP 是什么环境,会不会是 PHP 没有安装 GD 库,记得很久以前用 CMS 的时候没有 GD 库就不显示图片,而且不会报错,不过 用 mews/captcha 的时候都安装了 GD 库,没出过问题,没有 GD 库会不会报错也不清楚了。

    可以web 界面打印下 phpinfo ,或者命令行下 php -i | grep -i gd

    4个月前
  • Yu

    @broqiang

    /etc/php/7.2/cli/conf.d/20-gd.ini,
    gd
    GD Support => enabled
    GD headers Version => 2.2.5
    GD library Version => 2.2.5
    gd.jpeg_ignore_warning => 1 => 1

    @sde_wang
    按照教程一模一样的代码。如果需要可以贴
    register.blade.php

    @extends('layouts.app')
    
    @section('content')
        <div class="container">
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                    <div class="panel panel-default">
                        <div class="panel-heading">用户注册</div>
    
                        <div class="panel-body">
                            <form class="form-horizontal" method="POST" action="{{ route('register') }}">
                                {{ csrf_field() }}
    
                                <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
                                    <label for="name" class="col-md-4 control-label">用户名</label>
    
                                    <div class="col-md-6">
                                        <input id="name" type="text" class="form-control" name="name"
                                               value="{{ old('name') }}" required autofocus>
    
                                        @if ($errors->has('name'))
                                            <span class="help-block">
                                            <strong>{{ $errors->first('name') }}</strong>
                                        </span>
                                        @endif
                                    </div>
                                </div>
    
                                <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                                    <label for="email" class="col-md-4 control-label">E-Mail 地址</label>
    
                                    <div class="col-md-6">
                                        <input id="email" type="email" class="form-control" name="email"
                                               value="{{ old('email') }}" required>
    
                                        @if ($errors->has('email'))
                                            <span class="help-block">
                                            <strong>{{ $errors->first('email') }}</strong>
                                        </span>
                                        @endif
                                    </div>
                                </div>
    
                                <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                                    <label for="password" class="col-md-4 control-label">密 码</label>
    
                                    <div class="col-md-6">
                                        <input id="password" type="password" class="form-control" name="password" required>
    
                                        @if ($errors->has('password'))
                                            <span class="help-block">
                                            <strong>{{ $errors->first('password') }}</strong>
                                        </span>
                                        @endif
                                    </div>
                                </div>
    
                                <div class="form-group">
                                    <label for="password-confirm" class="col-md-4 control-label">重复密码</label>
    
                                    <div class="col-md-6">
                                        <input id="password-confirm" type="password" class="form-control"
                                               name="password_confirmation" required>
                                    </div>
                                </div>
    
                                <div class="form-group {{ $errors->has('captcha') ? ' has-error' : '' }}">
                                    <label for="captcha" class="col-md-4 control-label">验证码</label>
    
                                    <div class="col-md-6">
                                        <input id="captcha" class="form-control" name="captcha">
    
                                        <img class="thumbnail captcha" src="{{ captcha_src('flat') }}"
                                             onclick="this.src='/captcha/flat?'+ Math.random()" title="点击图片重新获取验证码">
    
                                        @if ($errors->has('captcha'))
                                            <span class="help-block">
                                            <strong>{{ $errors->first('captcha') }}</strong>
                                        </span>
                                        @endif
                                    </div>
                                </div>
    
                                <div class="form-group">
                                    <div class="col-md-6 col-md-offset-4">
                                        <button type="submit" class="btn btn-primary">
                                            注册 <i class="glyphicon glyphicon-arrow-right"></i>
                                        </button>
                                    </div>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    @endsection

    @Administrator
    请不要怀疑输入的代码问题。完全教程来。
    环境也是使用教程里面的 homestead 。没有做过教程以外的任何操作。
    注意一开始我已经贴出来相同的提问,并不是我一个人遇到这问题。
    其次 mews/captcha 已经生成 URL 。不存在库啊 环境啊不对的情况。

    那我就想问一个问题。 mews/captcha 生成的图片到底成功不成功应该如何检查。

    4个月前
  • @Yu

    这么晚还在学习吗?

    请务必尝试一下这个操作,占用不了你多久的时间的。

    file

    另外方便的话点击我是链接进行部署一遍查看效果,这是教程最终的源码

    相关链接一

    4个月前
  • Yu

    @Administrator
    Git 撤回的意义在哪里?
    ob_clean() 早已试过。无效。

    4个月前
  • Yu

    @Administrator
    @sde_wang
    @broqiang
    教程的最终源码在统一环境下配置以后是可以显示的

    我已经git reset 回去。然后 看了最终源码的Add captcha (c6fde8d6)这一commit 的 所有修改对着改。
    依然不能显示,所以请排除代码缺乏或者写错的情况。

    请从已经能调用完成函数并且已经有了正确的 captcha img 的 url。 只是这个url不知道为什么没有图片上来帮助我分析一下。
    这是我自己的项目,返回码什么的都是正常的就是没有img
    file

    这是教程项目源码部署的
    file
    出了返回有无图片数据以外 所有header 信息看上去都是一样的。

    4个月前 1
  • @Yu

    兄弟,这是练习项目的话 方便上传到github上供我安装测试看一下吗(不一定能帮到忙、但是沉迷想解决问题)

    4个月前
  • Yu

    @Administrator 给我GitHub id

    4个月前
  • @Yu
    FatherGodHz

    4个月前
  • file

    4个月前
  • @Yu

    我经过这里处理了一下 显示了

    运行以下命令生成配置文件 config/captcha.php:

    $  php artisan vendor:publish --provider='Mews\Captcha\CaptchaServiceProvider' 

    file

    我知道这不符合规范、但是有效、请找到另外的替代方法 或者自己重写覆盖一下?

    应该是你前面的步骤不规范?我无法返回这个课程的上一章节重新走一遍、(我找不到是哪个对应的:cry: )
    file

    4个月前
  • Yu

    你就生成了这一个配置就可以了?
    config/captcha.php

    php artisan vendor:publish --provider='Mews\Captcha\CaptchaServiceProvider' 

    这个配置我是配置过的,按照GitHub上的readme。然后依然无法显示。 只是给你的代码里面没有这个而已。

    另外不用看前面的代码,前面代码跟captcha无关。 为啥这么执着前面的代码。

    4个月前
  • @Yu

    指定路径增加相应位置增加这个函数。

    在生成图片前加上ob_clean(),清除图片缓存就好了

    ob_clean();

    file

    4个月前
  • @Yu
    file

    4个月前
  • Yu

    @Administrator

    是的 看你后面这个图改了一下 可以了。
    这又是为什么。
    我搜索以后是加到了这里,所以没有啥用。

    file

    4个月前
  • @Yu
    file

    尝试一下这个操作、如果有效你在自己的类里面增加一个方法调用自己的方法 增加这个来处理吧

    4个月前
  • Yu

    这样相当于在 vendor 里面进行修改。 按照的我理解,相当不科学的啊。

    4个月前
  • Yu

    我看到了。只是能显示了,依然不知道为啥。正确的处理姿势是什么。然后看我的回复。我在controller里面调用是没用的。

    4个月前
  • @Yu

    正确的处理姿势,关于这点非常抱歉我目前所学的可能帮不到你、
    我也是才转开发、野生自学的、知识最近还在补充、

    自己目前的理解是 再增加一个Http/Controllers/CaptchaController 然后增加方法

    <?php
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Mews\Captcha\Captcha;
    use Illuminate\Routing\Controller;
    
    class CaptchaController extends Controller
    {
        public function getCaptcha(Captcha $captcha, $config = 'default')
        {
            ob_clean();
            return $captcha->create($config);
        }
    }
    

    routes/web.php 内增加路由

    有错误请指出、共同进步、

    之所以这么执着前面的代码、

    是因为这个项目我完整的走了两次一次没过脑子(求快) 一次稍微的过了一下脑子(求记忆) 都没有发生这个问题、

    4个月前 1
  • 讨论很热烈,但是说话的态度不够友好。

    4个月前 1
  • 我也遇到了这样的问题.

    Ubuntu v18

    laravel v5.6

    按照教程的代码发现报这样的错误:

    flat:1 GET http://192.168.xx.xx/captcha/flat?0.8183671021373469 404 (Not Found)

    之所以出现这样的状况是因为我并未将 web 服务器根目录指向 public 目录。

    因此在生成URL的时候404.

    解决办法:

    原代码:onclick="this.src='/captcha/flat?'+Math.random()"

    修改为:onclick="this.src='captcha/flat?'+Math.random()"

    就好了。

    推测出现这类问题是路由的原因,如果这个方法不行可以参考这个思路。

    1天前
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 250 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Composer 中文文档

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档