Я пишу переменную сеанса успешно. Я получаю переменную сеанса успешно. Я даже могу определить его вручную, но он никогда не передается в часть имени функции ($ fileBaseName, $ formFieldName) ниже.
Любая помощь с благодарностью. Спасибо!
$uuid = $f3->get('SESSION.uuid'); // get session uuid
$f3->set('UPLOADS', $f3->UPLOAD_IMAGES); // set upload dir
$files = $web->receive(
function($file,$formFieldName) {
if($file['size'] > (5 * 1024 * 1024)) // if bigger than 5 MB
return false; // this file is not valid, return false will skip moving it
$allowedFile = false; // do not trust mime type until proven trust worthy
for ($i=0; $i < count($allowedTypes); $i++) {
if ($file['type'] == $allowedTypes[$i]) {
$allowedFile = true; // trusted type found!
}
}
// return true if it the file meets requirements
($allowedFile ? true : false);
},
true, //overwrite
function($fileBaseName, $formFieldName) {
$pathparts = pathinfo($fileBaseName);
if ($pathparts['extension']) {
// custom file name (uuid) + ext
return ($uuid . '.' . strtolower($pathparts['extension']));
} else {
return $uuid; // custom file name (md5)
}
}
);
Две функции, которые вы передаете $web->receive()
являются укупорочные. В PHP замыкания не могут видеть переменные, объявленные в области, из которой они объявлены. Чтобы сделать такие переменные видимыми, вы можете использовать use
ключевое слово:
$uuid = $f3->get('SESSION.uuid'); // get session uuid
$f3->set('UPLOADS', $f3->UPLOAD_IMAGES); // set upload dir
$files = $web->receive(
function($file,$formFieldName) {
//...
},
true, //overwrite
function($fileBaseName, $formFieldName) use ($uuid) {
//...
}
);
Это должно сделать $ uuid видимым внутри этой второй функции.
Поскольку переменная $uuid
не определено, это, вероятно, выходит за рамки.
Вам нужно передать переменную в вашу функцию, объявить ее как глобальную или установить свойство класса (если это не класс). Если он установлен в вашем сеансе, вы можете вызывать его напрямую, не назначая его переменной в любом месте вашего сеанса.