Dies liegt wahrscheinlich daran, dass ich nicht sehr gut mit PHP vertraut bin, aber hier ist: Ich benutze Fat-Free Framework, um ein Projekt zu erstellen und bin jetzt auf ein Problem gestoßen, das ich noch nicht gelöst habe /verstehen.
Dies wird in der Callback-Methode für eine Datei-Upload geschieht, die ich mit Fat-Free Web Erweiterung bin Handhabung, die receive($func=NULL,$overwrite=FALSE,$slug=TRUE)
Methode (beide $func
und $slug
können Funktionen sein, die ich in der bin mit Beispiel unten). Mit dieser Erweiterung kann ich eine Funktion als Argument verwenden, um die Datei in irgendeiner Weise zu validieren, und eine andere, um den Dateinamen zu ändern.
Das Problem ist, dass ich keine der globalen $ f3-Variablen innerhalb dieser Methoden verwenden kann. Z.B. In dem folgenden Code können Sie sehen, ich möchte eine Variable zu überprüfen, welche die maximale Dateigröße ist erlaubt, aber wenn ich $this->f3->get('maxFileSizeMb')
aufrufen, entweder direkt oder durch Zuweisen einer Variable früher in der Funktion, wird es den Code zu brechen.
$this->f3->set('UPLOADS','uploads/'.$this->f3->get('tmpMediaPath').'/');
$this->f3->set('maxFileSizeMb', 2);
$this->f3->set('fileNameLenght', 30);
// Using f3 \Web extension
$overwrite = false; // set to true, to overwrite an existing file; Default: false
// $slug = true; // we'll generate a new filename
$web = \Web::instance();
$files = $web->receive(function($file,$formFieldName) {
// Check against the maximum allowed file size
if($file['size'] > (2 * 1024 * 1024)) // if bigger than 2 MB
// >>>^<<< using $this->f3->get('maxFileSizeMb'); breaks the code
return false; // this file is not valid, return false will skip moving it
return true; // allows the file to be moved from php tmp dir to your defined upload dir
},
$overwrite,
function($fileBaseName, $formFieldName){
$fileExtension = ".tmp"; // Determine the true image type and rename it later on
// ##TODO## check if value is truly unique against the database. Here or elsewhere?
$randomName = bin2hex(openssl_random_pseudo_bytes(30));
// >>> ^^ <<< using $this->f3->get('fileNameLenght'); breaks the code
return $randomName.$fileExtension;
}
);
Vielen Dank im Voraus für jeden Eingang zu diesem Thema.