Opencart,OC 1.5.1.3,验证码错误

时间:2011-11-24 23:27:31

标签: apache captcha opencart

OC 1.5.1.3,Captcha图像不显示在这些页面上:

  1. 产品/评论部分
  2. 联系页面
  3. 访问此http://www.directmall.co.uk/index.php?route=information/contact/captcha(应生成图片的直接链接)
  4. 我看不到任何错误(Apache logs / error.txt文件)。我在语言文件中看不到任何空格 - 实际上我已经重新加载了整个EN包,只是为了确保..

    我怀疑依赖性破坏了(即使我有GD ......还有其他的东西......);禁用完全缓存 - 需要帮助!

    早在2009年我在论坛上发现了这类错误的痕迹,但似乎存在语言文件问题,这意味着空间的痕迹比正常情况更早地发送页面标题 - 但我检查了大部分文件我我认为参与其中,我已经清理了所有额外的空间 - 没有结果。

    谢谢, 波格丹

7 个答案:

答案 0 :(得分:14)

仅供参考我有同样的问题,这个解决方案(更改为system \ library \ captcha.php) 使验证码图像成功显示,表单通过验证:

function getCode(){
$out = ob_get_contents();
$out = str_replace(array("\n", "\r", "\t", " "), "", $this->code);
ob_end_clean();

    return $out;
}

答案 1 :(得分:2)

对于OC 1.5。*转到

  

系统\库\ captcha.php

查找function getCode()将此功能替换为

function getCode(){
$code= ob_get_contents();
$code= str_replace(array("\n", "\r", "\t", " "), "", $this->code);
ob_end_clean()    return $code; }

现在对于OC 2.1。*转到

  

录/控制器/人机识别/基本-验证码

查找$this->session->data['captcha'] = substr(sha1(mt_rand()), 17, 6);

在此

后面的代码下面
    $code= ob_get_contents();
    $code= str_replace(array("\n", "\r", "\t", " "), "",$this->session->data['captcha']);
    ob_end_clean();
    $this->session->data['captcha'] = $code;

对于OC 2.3。*转到

  

录/控制器/扩展/验证码/基本-captcha.php   查找$this->session->data['captcha'] = substr(sha1(mt_rand()), 17, 6);   在此之后放在代码下面

    $code= ob_get_contents();
    $code= str_replace(array("\n", "\r", "\t", " "), "",$this->session->data['captcha']);
    ob_end_clean();
    $this->session->data['captcha'] = $code;

它很有帮助!

答案 2 :(得分:1)

在Google Chrome上执行view-source:http://www.directmall.co.uk/index.php?route=information/contact/captcha向我展示了图片内容前面有一个空格。

您可能在"\n"之前或<?php之后的代码中的某处意外输出了?>

答案 3 :(得分:1)

你应该在你的getcode函数之后添加这段代码(库中的captcha.php)

$out = ob_get_contents();
$out = str_replace(array("\n", "\r", "\t", " "), "", $input);
ob_end_clean();

答案 4 :(得分:1)

只是为了澄清任何寻找此事的人。 系统/库/ captcha.php

更改功能行11 getCode()

到此:

function getCode(){
    //return $this->code;
    $out = ob_get_contents();
            $out = str_replace(array("\n", "\r", "\t", " "), "", $input);
            ob_end_clean();

            return $out;
}

应该这样做。

答案 5 :(得分:0)

我有同样的问题,我的具体情况,这是解决方案。可能在修复product.php时会引入一些空白行,这些行很难调试。无论如何这个代码:

$out = ob_get_contents();
$out = str_replace(array("\n", "\r", "\t", " "), "", $input);
ob_end_clean();

return $out;

确实修复了它,因为它清除了任何不应该存在的东西。

希望它可以帮助任何人。

答案 6 :(得分:0)

我最近遇到过这个问题,这个常见的解决方案(以前对我有用)不起作用:

$out = ob_get_contents();
$out = str_replace(array("\n", "\r", "\t", " "), "", $input);
ob_end_clean();
return $out;

我注意到/system/library/captcha.php中的showImage()方法直接访问$ this-&gt;代码而不是使用其getter,getCode()。这意味着它绕过了剥离空格的功能。

但是,像这样修改构造函数就可以了:

function __construct() { 
    $this->code = substr(sha1(mt_rand()), 17, 6); 
    $this->code = str_replace(array("\n", "\r", "\t", " "), "", $this->code);
}

可以在此处找到更多信息以及应用此修复程序的vQmod扩展程序: http://www.antropy.co.uk/blog/opencart-captcha-not-working-jfif/