Merge branch 'levi' into 'master'
feltöltési limit Closes #3 See merge request epagris/photowall!2
This commit is contained in:
commit
22a9491201
@ -4,6 +4,9 @@ ini_set("display_errors", "On");
|
||||
|
||||
include_once "globals.php";
|
||||
|
||||
// feltöltési limit 10 percen belül
|
||||
define("UPLOAD_LIMIT_10MIN", 10);
|
||||
|
||||
// könyvtárak
|
||||
define("ARTWORKS_DIR", "ARTWORKS");
|
||||
define("INCOMING_DIR", ARTWORKS_DIR . DIRECTORY_SEPARATOR . "incoming");
|
||||
@ -15,6 +18,22 @@ function only_alpha_numeric($input){
|
||||
return preg_replace("/[^a-zA-Z0-9_]+/", "", $input);
|
||||
}
|
||||
|
||||
// felhasználó IP címének meghatározása... nem is olyan triviális
|
||||
// https://stackoverflow.com/a/2031935
|
||||
function get_client_ip(){
|
||||
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED') as $key){
|
||||
if (array_key_exists($key, $_SERVER) === true){
|
||||
foreach (explode(',', $_SERVER[$key]) as $ip){
|
||||
$ip = trim($ip); // just to be safe
|
||||
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
|
||||
return $ip;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
// csatlakozás az adatbázishoz
|
||||
function open_sql_connection()
|
||||
{
|
||||
@ -30,17 +49,31 @@ function incoming_from_uid($uid)
|
||||
return INCOMING_DIR . DIRECTORY_SEPARATOR . $uid;
|
||||
}
|
||||
|
||||
// feltöltött fájl feldolgozása
|
||||
// RET:
|
||||
// -2: MIME-hiba
|
||||
// -3: mérethiba
|
||||
// pozitív: egyedi azonosító, a feltöltés sikerült
|
||||
/*
|
||||
* feltöltött fájl feldolgozása
|
||||
* RET:
|
||||
* -1: ismeretlen hiba
|
||||
* -2: MIME-hiba
|
||||
* -3: mérethiba
|
||||
* -3: elérte a feltöltési limitet
|
||||
* string: egyedi azonosító, a feltöltés sikerült
|
||||
*/
|
||||
|
||||
define("MIME_ERROR", -2);
|
||||
define("SIZE_ERROR", -3);
|
||||
define("LIMIT_ERROR", -4);
|
||||
|
||||
function process_uploaded_file($file_info)
|
||||
{
|
||||
// feltöltési limit ellenőrzése
|
||||
global $dbconn;
|
||||
$ip = mysqli_real_escape_string($dbconn, get_client_ip()); // escape, biztos ami biztos
|
||||
$query = "SELECT COUNT(No) FROM server_access WHERE Timestamp > TIMESTAMPADD(MINUTE, -10, CURRENT_TIMESTAMP) AND IP = '$ip';";
|
||||
$ret = (int)mysqli_query($dbconn, $query)->fetch_assoc()["COUNT(No)"];
|
||||
if ($ret === false || $ret >= UPLOAD_LIMIT_10MIN){
|
||||
return LIMIT_ERROR;
|
||||
}
|
||||
|
||||
$ACCEPTED_MIME_TYPES = ["image/png", "image/jpeg"]; // elfogadott MIME-típusok
|
||||
$MINIMUM_SIZE_BY_DIM = 2000; // minimális oldalméret
|
||||
|
||||
@ -63,6 +96,14 @@ function process_uploaded_file($file_info)
|
||||
$incoming_filename = incoming_from_uid($tmp_uid);
|
||||
$ret = move_uploaded_file($tmp_filename, $incoming_filename);
|
||||
|
||||
// felhasználó IP címének eltárolása a feltöltési limit betartatásához
|
||||
$query = "INSERT INTO server_access (IP, Image_FileName, Timestamp) VALUES('$ip', '$tmp_uid', CURRENT_TIMESTAMP);";
|
||||
$res = mysqli_query($dbconn, $query);
|
||||
// ha valamiért sikertelen, hibával térünk vissza
|
||||
if ($res !== true) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return $tmp_uid;
|
||||
}
|
||||
|
||||
|
@ -126,6 +126,9 @@ function process_upload_response(resp) {
|
||||
case -3:
|
||||
alert("Mérethiba: a kép hosszabb oldalának legalább 2000 pixel szélesnek kell lennie!");
|
||||
break;
|
||||
case -4:
|
||||
alert("Elérted a feltöltési limitet.\nKérlek próbáld újra később!");
|
||||
break;
|
||||
default:
|
||||
alert("Valami nem stimmel!\nHa ismételten nem sikerül, kérlek jelezd a hibát!");
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user