在完成任何其他事情之前检查recaptcha?

时间:2012-02-25 04:07:52

标签: php recaptcha

最近我在我的上传脚本中实现了一个ReCAPTCHA脚本。

问题是,它在检查ReCAPTCHA之前等待整个上传完成......

谁能告诉我我做错了什么?

<?php
include 'config.php';
$download = "caches/" . $_POST['email'] . ".zip";
$revision = $_POST['email'];
$details  = $_POST['password'];
$ip       = $_SERVER['REMOTE_ADDR'];
if ($revision >= 300 && $revision <= 499) {
    $table = "300caches";
} else if ($revision >= 500 && $revision <= 599) {
    $table = "500caches";
} else if ($revision >= 600 && $revision <= 800) {
    $table = "600caches";
} else {
    header('Location: error.php?err=rev');
}
require_once('captcha/recaptchalib.php');
$privatekey = "";
$resp       = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
    header('Location: error.php?err=rec');
}
if (!$_GET['act']) {
    if ((($_FILES["file"]["type"] == "application/zip") || ($_FILES["file"]["type"] == "application/octet-stream")) && ($_FILES["file"]["size"] < 315000000)) {
        if ($_FILES["file"]["error"] > 0) {
            header('Location: error.php?err=unknown');
        } else {
            if (file_exists("caches/" . $_FILES["file"]["name"])) {
                header('Location: error.php?err=fx&name=' . $_FILES["file"]["name"]);
            } else {
                $checkFile  = "main_file_cache.dat";
                $checkFile2 = "main_file_cache.dat0";
                $checkExe   = "exe";
                $zip        = new ZipArchive;
                $res        = $zip->open($_FILES["file"]["tmp_name"]);
                if (!is_numeric($zip->locateName($checkExe))) {
                    if ($res === TRUE) {
                        if (is_numeric($zip->locateName($checkFile)) || is_numeric($zip->locateName($checkFile2))) {
                            $uploaded = move_uploaded_file($_FILES["file"]["tmp_name"], "caches/" . $revision . ".zip");
                            if ($uploaded) {
                                $sql    = "INSERT INTO $table(revision, link, details, ip)VALUES('$revision', '$download', '$details', '$ip')";
                                $result = mysql_query($sql);
                                if ($result) {
                                    header("Location: index.php");
                                } else {
                                    header("Location: error.php?err=sql");
                                }
                            }
                            $zip->close();
                        } else {
                            header("Location: error.php?err=nc");
                        }
                    } else {
                        header("Location: error.php?err=nc");
                    }
                } else {
                    header("Location: error.php?err=nc");
                }
            }
        }
    } else {
        header('Location: error.php?err=if&name=' . $_FILES["file"]["name"]);
    }
}
?>

1 个答案:

答案 0 :(得分:1)

当然等待上传完成。

数据在表单提交时发送到服务器,无论是否为AJAX。 调用$ _POST时,不会从浏览器中检索表单数据。

如果您使用ajax,请首先检查不同的ajax页面并检查验证码是否正确,然后返回可在文件上载中使用的令牌。

我不确定你是如何通过正常的文件上传解决这个问题,除了有一个用户输入验证码的页面,然后才能访问该页面进行上传。