blackseabreathe
@blackseabreathe
brackets

Почему php не видит переменную?

Делаю загрузку изображения на сервер через Ajax, а php файл проверяет форму на ошибки

сначала объявляю переменную
$ava = "";
Затем пишу функцию проверки файла на существование, размер (МБ) и тип
function can_upload($file){
if(empty($file['tmp_name'])){
echo json_encode(['error' => 'Вы не выбрали файл для загрузки. Загрузите аватарку'], JSON_UNESCAPED_UNICODE);
exit;
}
if($file['size'] > 10485760){
echo json_encode(['error' => 'Аватарка не может быть больше 10 МБ..'], JSON_UNESCAPED_UNICODE);
exit;
}
$ext = pathinfo($_FILES['ava']['name'], PATHINFO_EXTENSION);
$types = array('jpg', 'jpeg', 'heic', 'png', 'bmp', 'JPG', 'JPEG', 'HEIC', 'PNG', 'BMP');
if(!in_array($ext, $types)){
echo json_encode(['error' => 'Разрешено загружать изображения только в форматах [.png, .jpg, .jpeg, .heic, .bmp]'], JSON_UNESCAPED_UNICODE);
exit;
}
return true;
}

Затем пишу функцию загрузки файла
function make_upload($file){
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/user_upload/';
if(!is_dir( $uploaddir)) mkdir($uploaddir, 0777);
$file = base64_decode($_POST['ava']);
$file = explode(',', $file);
$file = base64_decode($file[1]);
$fileName = date('YmdHis').'_'.translit($_FILES['ava']['name']);
if(move_uploaded_file($_FILES['ava']['tmp_name'], $uploaddir.$fileName)){ //пробуем загружать файл на сервер
$href = ""; //переменная для ссылки на загруженный файл
$href = $uploaddir.$fileName; //ссылка на загруженный файл
$ava = $href; //пробую к объявленной переменной присвоить значение переменной $href(ссылку)
} else {
echo json_encode(['error' => "Аватарка не загружена, попытайтесь снова"], JSON_UNESCAPED_UNICODE);
exit;
}
}

Далее выполняем саму загрузку
//пробуем загрузить файл
if(is_uploaded_file($_FILES['ava']['tmp_name'])){ //загружаем
$check = can_upload($_FILES['ava']); // обращаемся к ф-ии проверок
if($check === true){ //если файл проверки прошел
make_upload($_FILES['ava']); //запуск ф-ии загрузки файла
} else{
echo json_encode(['error' => "$check"], JSON_UNESCAPED_UNICODE);
exit;
}
} else {
echo json_encode(['error' => "Аватарка не загружена (без нее профиль никто не будет смотреть)"], JSON_UNESCAPED_UNICODE);
exit;
}


Собственно сделал проверку, где вывожу все НЕ пустые переменные и выводятся все кроме $ava. То есть почему-то в ф-ии make_upload $avaне принимает значение $href
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
@dzhebrak
В функции make_upload вы изменяете локальную версию переменной $ava, т.е. ту, которая доступна только в пределах функции make_upload.

Вы можете использовать ключевое слово global в функции make_upload, чтобы изменить значение глобальной переменной $ava:
function make_upload($file){
    global $ava;
    $ava = $href;
    // ...
}

Здесь можно почитать про области видимости переменных https://www.php.net/manual/ru/language.variables.s...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы