最近我在我的上传脚本中实现了一个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"]);
}
}
?>
答案 0 :(得分:1)
当然等待上传完成。
数据在表单提交时发送到服务器,无论是否为AJAX。 调用$ _POST时,不会从浏览器中检索表单数据。
如果您使用ajax,请首先检查不同的ajax页面并检查验证码是否正确,然后返回可在文件上载中使用的令牌。
我不确定你是如何通过正常的文件上传解决这个问题,除了有一个用户输入验证码的页面,然后才能访问该页面进行上传。