我有一个MVC应用程序,我使用composer来安装securimage。
目录布局如下:
app/
composer.json
composer.lock
vendor/
...
dahpp/securimage (with securimage.php, securimage_show.php, etc).
public_html/
.htaccess
index.php (routing, bootstrapping, etc.)
templates/
contact.php
应用程序中没有任何内容可公开获取。由于securimage_show.php不可访问,我试图将captcha生成代码放在contact.php模板本身。
所以在那个模板中,我有这个:
<?php
session_start();
$securimage = new Securimage(array('send_headers' => false));
?>
later in the HTML...
<img id="captcha" src="<?= $securimage->show() ?>" alt="CAPTCHA Image" />
问题是,当我这样做时,我得到一堆问号乱码(? ),就像有编码问题或其他什么。如果我将send_headers设置为true,则会收到错误:“无法生成验证码图像,内容已经输出。这很可能是由于配置错误或者向浏览器发送了PHP错误。”
使用getCaptchaHtml()也不起作用。它尝试生成的图像路径会将计算机上的绝对路径附加到主机(http://www.example.com/var/www/app/vendor/dahpp/securimage)。
public_html目录中的受保护的app目录的符号链接是什么工作。换句话说,如果我创建一个名为securimage_show.php的符号链接并将其指向app / vendor / dahpp / securimage下的真实文件,并将img源设置为它:
<img id="captcha" src="securimage_show.php" alt="CAPTCHA Image" />
然而,这似乎并不像使用官方方法那样干净。是否有某个设置我在某处丢失或者我是否仍然使用符号链接方法?
答案 0 :(得分:3)
为了显示验证码图像,您必须将securimage_show.php复制到可公开访问的文件夹,以便生成图像(或创建一个名为securimage_show.php的符号链接并将其指向安装文件夹)。
然后,由于securimage.php与securimage_show.php的路径不同,您需要将选项传递给getCaptchaHtml()
,以便它使用src
标记中的正确<img>
属性
$options = array('securimage_path' => '/images'); // <= change this path
echo Securimage::getCaptchaHtml($options);
将$securimage->show()
放入img标记时出现乱码的原因是因为它返回表示图像的二进制数据,而不是可以传递给img标记的数据。
答案 1 :(得分:0)
Securimage依赖于PHP的GD
和FreeType
库。确保你已经安装了两个,以及带有显示Captcha图像的乱码字符。
来源:遇到了这个问题 - GD失踪了。