2016-05-22 14 views
0

1分で何かに制限を付けるにはどうすればよいですか? は、私はこのコードはajax.Howによって呼び出され、このPHPコードPHPに上限を設定する

if(isset($_POST['new_post'])){ 
      $Text=htmlspecialchars($_POST['new_post'],ENT_QUOTES); 
      $Text=trim($Text); 
      if (is_uploaded_file($_FILES['Upload_f']['tmp_name'])) { 
        $fileP=$_FILES['Upload_f']; 
        $fileP_name=$fileP['name']; 
        $fileP_tmp=$fileP['tmp_name']; 
        $fileP_size=$fileP['size']; 
        $fileP_error=$fileP['error']; 
        $fileP_extension=explode('.', $fileP_name); 
        $fileP_extension=strtolower(end($fileP_extension)); 
        $allowed=array('jpg','png'); 
        if (in_array($fileP_extension, $allowed)){ 
         if ($fileP_error===0) { 
          if ($fileP_size<=2097152){ 
           $fileP_new_name=uniqid().'.'.$fileP_extension; 
          } 
         } 
         $NotInarray=false; 
        }else{ 
         $fileP_new_name=""; 
         $NotInarray=true; 
        } 
        $Fileuploaded=true; 
      }else{ 
       $fileP_new_name=""; 
       $fileP=0; 
       $Fileuploaded=false; 
       $NotInarray=false; 
      } 
       $Posts=$con->query("SELECT Posts FROM user_opt WHERE Username='$NameId'"); 
       $row=$Posts->fetch_row(); 
      if (strlen($Text)>400) { 
       $Res="Error occurred.Please try again"; 
       $PostNum=$row[0]; 
      }elseif(strlen($Text)==0 && $fileP==0){ 
       $Res="Both fields are empty"; 
       $PostNum=$row[0]; 
      }elseif($Fileuploaded===true){ 
       if ($NotInarray==true) { 
       $Res="Only jpg and png files are allowed"; 
       $PostNum=$row[0]; 
       }elseif ($fileP_error!=0) { 
       $Res="Error occurred.Please try again"; 
       $PostNum=$row[0]; 
       }else{ 
        $Res="Success"; 
        $PostNum=$row[0]+1; 
        $upladed++; 
       } 
      }else{ 
        function generateRandomString($length) { 
         $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
         $charactersLength = strlen($characters); 
         $randomString = ''; 
         for ($i = 0; $i < $length; $i++) { 
          $randomString .= $characters[rand(0, $charactersLength - 1)]; 
         } 
         return $randomString; 
        } 
        $Rand=generateRandomString(100); 
        $query=$con->query("INSERT INTO uploads (Rand,Username,image,`Text`,`Date`) VALUES('$Rand','$NameId','$fileP_new_name','$Text',NOW())"); 
        $querya=$con->query("UPDATE user_opt SET posts=posts+1 WHERE Username='$NameId'"); 
        $PostNum=$row[0]+1; 
        $Res="Success";   
        $upladed++; 
       } 
       echo json_encode(array($Res,$PostNum,$upladed)); 
     } 

を持っている私は、このコードは、1分間に最大5回実行することができますか?私はこのよう

$upladed=0; 
    if(isset($_POST['new_post'])){ 
      if ($upladed<=5) { 
       code 
    } 
} 

それを作るしかし、試してみました新しいAjaxが毎回$ upladedが0になるたびに

+0

要求、セッション、キャッシュなどの間で変数を使用できるように、変数をどこかに格納する必要があります。 – JimL

+0

@JimLどうすればキャッシュに保存できますか? –

答えて

1

セッションを使用して$ uploaded変数の値を格納し、Ajax呼び出しが発生するたびにその値を取得することができます。最初のポストが発生したときに実際の分を保存して、それ以上のポストが到着しないようにすることもできます。そして、もう1分が始まったときに、アップロードされた$を無効にする必要があります(0に設定してください)。

より

変更されたコードは次のようになります

(自分の限界まで)あなたが最初のポストの実際の秒を格納し、他の潜在的なアップロードに60秒を与えている場合は、より良い:

<?php 

session_start(); 

function generateRandomString($length) { 
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $charactersLength = strlen($characters); 
    $randomString = ''; 
    for ($i = 0; $i < $length; $i++) { 
     $randomString .= $characters[rand(0, $charactersLength - 1)]; 
    } 
    return $randomString; 
} 

function isFileUploadAllowed() { 
    $isAllowed     = true; 
    $timeNow     = time(); 
    $timeFrameInSeconds   = 60; 
    $maxUploadsInTimeFrame  = 5; 
    $firstUploadTime   = $_SESSION['firstUploadTime'] ? intval($_SESSION['firstUploadTime']) : $timeNow; 
    $numberOfUploadsInTimeFrame = $_SESSION['numberOfUploadsInTimeFrame'] ? intval($_SESSION['numberOfUploadsInTimeFrame']) : 0; 
    $givenTimeFrameExpired  = (($firstUploadTime + $timeFrameInSeconds) < $timeNow); 

    // when there would be more time to allow upload 
    if (!$givenTimeFrameExpired) { 
     // disallowing only when the limit is reached 
     if ($numberOfUploadsInTimeFrame + 1 > $maxUploadsInTimeFrame) { 
      $isAllowed = false; 
     } 
    } 

    // if there is no need to restrict this upload 
    if ($isAllowed === true) { 
     // if previous time frame is expired, reset 'firstUploadTime' and 'numberOfUploadsInTimeFrame' 
     if ($givenTimeFrameExpired) { 
      $_SESSION['firstUploadTime'] = $timeNow; 
      $_SESSION['numberOfUploadsInTimeFrame'] = 0; 
     } 

     // increasing the number of uploaded files 
     $_SESSION['numberOfUploadsInTimeFrame']++; 
    } 

    return $isAllowed; 
} 

if(isset($_POST['new_post'])){ 
    $Text=htmlspecialchars($_POST['new_post'],ENT_QUOTES); 
    $Text=trim($Text); 
    if (is_uploaded_file($_FILES['Upload_f']['tmp_name'])) { 
     if (isFileUploadAllowed()) { 
      $fileP=$_FILES['Upload_f']; 
      $fileP_name=$fileP['name']; 
      $fileP_tmp=$fileP['tmp_name']; 
      $fileP_size=$fileP['size']; 
      $fileP_error=$fileP['error']; 
      $fileP_extension=explode('.', $fileP_name); 
      $fileP_extension=strtolower(end($fileP_extension)); 
      $allowed=array('jpg','png'); 
      if (in_array($fileP_extension, $allowed)){ 
       if ($fileP_error===0) { 
        if ($fileP_size<=2097152){ 
         $fileP_new_name=uniqid().'.'.$fileP_extension; 
        } 
       } 
       $NotInarray=false; 
      }else{ 
       $fileP_new_name=""; 
       $NotInarray=true; 
      } 
      $Fileuploaded=true; 
     } 
    }else{ 
     $fileP_new_name=""; 
     $fileP=0; 
     $Fileuploaded=false; 
     $NotInarray=false; 
    } 
     $Posts=$con->query("SELECT Posts FROM user_opt WHERE Username='$NameId'"); 
     $row=$Posts->fetch_row(); 
    if (strlen($Text)>400) { 
     $Res="Error occurred.Please try again"; 
     $PostNum=$row[0]; 
    }elseif(strlen($Text)==0 && $fileP==0){ 
     $Res="Both fields are empty"; 
     $PostNum=$row[0]; 
    }elseif($Fileuploaded===true){ 
     if ($NotInarray==true) { 
     $Res="Only jpg and png files are allowed"; 
     $PostNum=$row[0]; 
     }elseif ($fileP_error!=0) { 
     $Res="Error occurred.Please try again"; 
     $PostNum=$row[0]; 
     }else{ 
      $Res="Success"; 
      $PostNum=$row[0]+1; 
      $upladed++; 
     } 
    }else{ 
      $Rand=generateRandomString(100); 
      $query=$con->query("INSERT INTO uploads (Rand,Username,image,`Text`,`Date`) VALUES('$Rand','$NameId','$fileP_new_name','$Text',NOW())"); 
      $querya=$con->query("UPDATE user_opt SET posts=posts+1 WHERE Username='$NameId'"); 
      $PostNum=$row[0]+1; 
      $Res="Success";   
      $upladed++; 
     } 
     echo json_encode(array($Res,$PostNum,$upladed)); 
} 
+0

私は秒でPHPを保存することができますか? –

+0

time()関数でそれを得ることができます。現在の時刻を秒単位で整数で返します。 $ _SESSION ['firstUploadTime'] =時間();セッションに保存した後は、新しいajax呼び出しの実際の時刻と常に比較できます。 – SalDev

+0

あなたはあなたの答えにコードを書くことができますか私は本当にあなたが話しているのか分かりません –

関連する問題