在受保护的目录中使用Securimage和securimage_show.php

时间:2014-04-18 00:13:07

标签: php captcha

我有一个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" />

然而,这似乎并不像使用官方方法那样干净。是否有某个设置我在某处丢失或者我是否仍然使用符号链接方法?

2 个答案:

答案 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的GDFreeType库。确保你已经安装了两个,以及带有显示Captcha图像的乱码字符。

来源:遇到了这个问题 - GD失踪了。