2012-02-25 7 views
0

最近、アップロードスクリプトにReCAPTCHAスクリプトを実装しました。問題は、あるそれはそれはreCAPTCHAのがチェックする前WHOLEアップロードが完了するまで待機していることは何ですか何かが完了する前に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

CAPTCHAの 'header()'が失敗した後に終了してください – random

+0

@randomこれを試しましたが、まだアップロードが完了するのを待っています。 – Laszki

答えて

1

もちろん、アップロードが完了するのを待ちます。

データはAJAXであるかどうかに関係なく、フォーム送信時にサーバーに送信されます。 $ _POSTを呼び出すと、フォームデータがブラウザから取得されません。

あなたがajaxを使用している場合は、最初に別のajaxページをチェックして、captchaが正しいことを確認し、ファイルアップロードで使用できるトークンを返します。

アップロードするページにアクセスする前に、ユーザーがキャプチャを入力したページ以外に、通常のファイルアップロードでこの問題を回避する方法がわかりません。

+0

また、try/catch文を実装すると、そのコードをより洗練されたものにすることができます。 – MichaelH

関連する問題