Ik zit even met een dingetje die ik niet kan terug vinden op het forum en hoop hier een antwoord te mogen ontvangen. Vanuit een applicatie kan ik bestand uploaden naar een php upload bestand (plaats ik hieronder), dat werkt prima zonder problemen. Nu kan ik in deze applicatie weinig veranderen, wel de headers die meegestuurd aanpassen en een toevoegen, wat ik wil is dat het upload/ path aangepast word afhankelijk van de header, voorbeeld: er word een header mee gestuurd met header('Location: 'ditiseentest); dan zou het bestand wat gepload worden moeten worden geplaatst in de map: $upload_path = 'upload/ditiseentest/'; // mappen zijn aanwezig en hoeven niet worden aangemaakt.

Zijn hier wat voorbeelden van of uitleg van iemand mij hierin kan helpen?


<?php


header("Acess-Control-Allow-Origin: *");
header("Acess-Control-Allow-Methods: POST");
header("Acess-Control-Allow-Headers: Acess-Control-Allow-Headers,Content-Type,Acess-Control-Allow-Methods, Authorization");

$data = json_decode(file_get_contents("php://input"), true); // collect input parameters and convert into readable format
	
$fileName  =  $_FILES['file']['name'];
$tempPath  =  $_FILES['file']['tmp_name'];
$fileSize  =  $_FILES['file']['size'];
		
if(empty($fileName))
{
	$errorMSG = json_encode(array("message" => "please select image", "status" => false));	
	echo $errorMSG;
}
else
{
	$upload_path = 'upload/'; // set upload folder path 
	
	$fileExt = strtolower(pathinfo($fileName,PATHINFO_EXTENSION)); // get image extension
		
	// valid image extensions
	$valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); 
					
	// allow valid image file formats
	if(in_array($fileExt, $valid_extensions))
	{				
		//check file not exist our upload folder path
		if(!file_exists($upload_path . $fileName))
		{
			// check file size '5MB'
			if($fileSize < 5000000){
				move_uploaded_file($tempPath, $upload_path . $fileName); // move file from system temporary path to our upload folder path 
			}
			else{		
				$errorMSG = json_encode(array("message" => "Sorry, your file is too large, please upload 5 MB size", "status" => false));	
				echo $errorMSG;
			}
		}
		else
		{		
			$errorMSG = json_encode(array("message" => "Sorry, file already exists check upload folder", "status" => false));	
			echo $errorMSG;
		}
	}
	else
	{		
		$errorMSG = json_encode(array("message" => "Sorry, only JPG, JPEG, PNG & GIF files are allowed", "status" => false));	
		echo $errorMSG;		
	}
}
		
// if no error caused, continue ....
if(!isset($errorMSG))
{
	$query = mysqli_query($conn,'INSERT into tbl_image (name) VALUES("'.$fileName.'")');
			
	echo json_encode(array("message" => "Image Uploaded Successfully", "status" => true));	
}

?>


Het gaat hier o soort van ai inderdaad, of het is een api, ken der werkelijke verschillen niet. De header is enige wat ik kan aanpassen / iets mee sturen / naar de upload.php pagina, ik kan target_dir="uploads/".$username */* wel aanpassen in de upload.php pagina maar er zal toch van een $username vanuit de applicatie naar de php gestuurd moeten worden. Ik weinig dan alleen de header aansturen richting de php pagina.
Ken je juiste termen, want AI en API zijn twee totaal verschillende dingen:

AI is artificiële intelligentie, ook of kunstmatige intelligentie genoemd, en waar ChatGP bekend om is.
API is 'application programming interface' wordt gebruikt om op een geformaliseerde manier gegevens uit te wisselen tussen sites/app's. Zoals je bijvoorbeeld bij OpenWeatherMap het weer uit Paramaribo kan ophalen, en kan gebruiken op je eigen website/app.

Maar er is al hier de functie getallheaders() genoemd om HTTP headers uit te kunnen lezen. Heb je daar al naar gekeken?
De variabele $username is in mijn voorbeeld niet gedefinieerd, maar met die genoemde functie kan je de username uit de header() ophalen, en daarin verwerken.
Hoe weet de website wie er is ingelogd?
Zoals ik begrijp is er sprake van een API om een upload te laten plaatsvinden.

Om iemand te identificeren, zou dit gebruikt kunnen worden:

$key = getallheaders()['API-Key'];

Ik neem aan dat de header dan bijvoorbeeld API-Key heet, en geen Username. Iemand die de API zelf aanroept kan anders eenvoudig met de naam 'pietje' onder iemand anders zijn naam foto's uploaden, wat ongewenst is. Een unieke sleutel is beter, daaraan kan weer geïdentificeerd worden om wie het gaat, en in welke map de foto's geplaatst worden. En een unieke sleutel raad je ook niet.

Je kan eventueel nog iets een controle inbouwen om dergelijke brute-force acties te detecteren en het IP tijdelijk te blokkeren.

Heej Aar (leuke balonnen!), de vraag was eigenlijk bedoeld voor Marcel. Hij werkt met die API, dus ik neem aan dat hij dan toch weet hoe hij een klant identificeert?
Ja, dat snap ik. Ik lees wat van hem over headers, en ik denk dan aan een API-key achtige constructie.

En die ballonnen heb ik zelf gemaakt. Ik ben in mijn hobby ook beginnend ballonkunstenaar.
Poedels, beertjes, bloemetjes, leuke hoeden of armbandjes. Ik kan ze vouwen :-D
Geinig hoor! Da's weer wat anders dan achter de computer zitten :-)
als de documenten die geupload worden weer geopend kunnen worden in een site, bijvoorbeeld als iemand daar zijn profielfoto neer mag zetten, dan verraad je daarmee direct de api-key.

Dat is dus niet handig.

Ik zou die 2 los van elkaar halen.
API key is goed, en die kun je gebruiken om te achterhalen wie er nu blijkbaar iets wil uploaden.
Dan heb je
- zijn naam
- zijn userid
- zijn status (mag uploaden; is niet gebanned; is niet verwijderd etc)
- zijn uploadpath

Dat uploadpath mag desnoods best een uuid zijn: uniek en niet (echt) voorspelbaar.

De simpele benadering is inderdaad "stuur een 'key' mee en dat is je path" maar dan heb je dus geen idee wie dat is en of hij wel mag uploaden. (en of hij niet 24GB per dag je server op pompt)

Reageren