我在运行wamp的本地计算机上使用google recaptcha v2。一切看起来都很好,除非它应该验证表格
时它会一直死我收到此错误:
Fatal error: Class 'ReCaptcha\RequestMethod\Post' not found in C:\wamp\www\php\contactForm\Captcha\ReCaptcha.php on line 73
我几乎从google中复制/粘贴了示例代码:
if (!empty($human)) {
require_once('Captcha\ReCaptcha.php');
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($human, $remoteIp);
if ($resp->isSuccess()) {
// verified!
我已经从google github(https://github.com/google/recaptcha/tree/master/src/ReCaptcha)下载了文件,并且只是使用了文件夹/文件名称。我的验证文件上面有一个文件夹,但为了以防万一,我还尝试将文件复制到与验证脚本相同的文件夹中。
有什么想法吗?
答案 0 :(得分:5)
谷歌银行似乎每个人都使用composer来安装他们的存储库。说实话,这是他们在github repo上给出的唯一安装方法readme.md https://github.com/google/recaptcha
使用composer安装google recaptcha等软件包时,软件包可以选择在https://github.com/google/recaptcha/blob/master/composer.json
中注册自动加载器"autoload": {
"psr-4": {
"ReCaptcha\\": "src/ReCaptcha"
}
},
这样,您必须在脚本中包含所有包类的访问权限,即编译器在安装软件包时生成的autoload.php。
第34行:https://github.com/google/recaptcha/blob/master/examples/example-captcha.php
// Initiate the autoloader.
require_once __DIR__ . '/../vendor/autoload.php';
自动加载器是一个在要求php时尝试加载类的函数。在这种情况下,它会将命名空间映射到磁盘上的目录结构。
有关php自动加载器的更多信息,请访问:http://php.net/autoload此处:http://www.php-fig.org/psr/psr-4/examples/
如果你不想使用作曲家及其自动加载功能,你可能会觉得这很有用:https://github.com/abraham/twitteroauth它有一个你可以借用的autoload.php,它可以加载没有作曲家的类。
$prefix = 'ReCaptcha\\';
$base_dir = __DIR__ . '/src/ReCaptcha/';
new ReCaptcha\ReCaptcha($RECAPTCHASECRETKEY);
答案 1 :(得分:5)
我希望我不会受到猛烈抨击,但我发现如果您需要所有按照设计工作的文件而不使用自动加载器或编写器。
//GOOGLE RECAPTCH CODE
require_once('/cgi-bin/src/ReCaptcha/ReCaptcha.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod.php');
require_once('/cgi-bin/src/ReCaptcha/RequestParameters.php');
require_once('/cgi-bin/src/ReCaptcha/Response.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod/Post.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod/Socket.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod/SocketPost.php');
$gRecaptchaResponse = $_POST['g-recaptcha-response'];
$secret = 'YOUR SECRET KEY';
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp);
if ($resp->isSuccess()) {
//DO ACTION IF SUCCESSFUL
} else {
$errors = $resp->getErrorCodes();
}
//END OF GOOGLE RECAPTCHA CODE