今天在作验证码功能的时候,发现,thinkphp视图中引入验证码图片,却显示一个破碎照片的小图标,能明显,图片引入失败。php
就是这个样子:html
因而我在网上搜索怎么解决,网上答案主要分为如下几种:linux
1.php没有安装gd库,thinkphp
2.或者gd库没有开启。windows
3.有BOM头存在,须要用ob_clean()函数清理。函数
我用phpinfo()打开网页,工具
我又打开个人php.ini设置,把php_gd2.dll前面的分号去掉(取消注释),url
但是仍是没法显示图片。调试
后来我查到,php_gd2.dll是windows环境中gd库使用时须要开启的扩展,而我使用的是linux,在php.ini里须要开php_gd.so。cdn
但我在个人php.ini里没有找到php_gd.so这个文件。
后来我决定从新编译安装一下gd库,由于这样能生成所谓的php_gd.so,
你们若是想尝试,能够试试,会费些时间。
虽然没有解决个人问题,但仍是感谢这个博主的教程->:linux下编译安装gd库教程。
虽然有了php_gd.so这个文件,也在php.ini里添加这这个扩展,可是仍是没法显示图片。
从早搞到晚,实在有点崩溃。
后来,我发现,打开谷歌调试工具,图片地址没有报错,说明路径是合法的。
而当我复制图片连接,从新打开图片时,显示的倒是thinkphp首页,根本没有定向到个人验证码方法。
因此我以为时个人src地址有问题,我在视图中使用的时tp3自带的{:U('')}方法,
但我以为这个方法自己因该没有问题,因而我尝试在上面的图片连接中去掉admin模块前的index.php,
再去访问图片连接,
终于,验证码这个控制器下的方法管用了,验证码显示了。
在这个index.php后面不管加什么控制器方法,都会定向到tp首页。
但是,tp3的U方法为何会在url里添加一个index.php呢?
后来我发现,与thinkphp的url模式有关,thinkphp默认是pathinfo模式,
而U方法会在pathinfo模式下,自动添加index.php,生成一个路由。
而若是改为rewrite模式,就不会添加index.php。就能访问一个正常的方法连接。