PHP: Как правильно использовать pathinfo после использования base64 decode

#php #arrays #pathinfo

#php #массивы #pathinfo

Вопрос:

Я получаю сообщение об ошибке Array to string conversion в pathinfo после использования base64 decode image. При попытке поместить мои файлы в директорию возникает ошибка. Мне нужно сохранить имя изображения.

Кстати, мои файлы изображений были получены из js DOM

 var formG = new FormData();
for(var i=0; i<imageTrust.length;i  ){
    formG.append('file_multiImage[]', imageTrust[i]);
}


if(isset($_POST['file_multiImage'])){
    $multi_image =  $_POST['file_multiImage'];
    foreach ($multi_image as $key => $value) {
        $staticName = $event_id.'conNo'.$finalContestantNum;
        $data = str_replace('data:image/jpeg;base64,', '', $value);
        $data = str_replace(' ', ' ', $data);
        $data = base64_decode($data);
        $file = pathinfo( $staticName . PATHINFO_EXTENSION); //Error occurs here
        file_put_contents($theDir.'/'. $file, $data);

    }
}
  

Результат массива

 Array(
       [0] => data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQA 
       [1] => data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAlgCWAAD
       [2] => data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/7QC
)
//I did not just continue strings are too long
  

Комментарии:

1. Сначала вам лучше прочитать руководство по загрузке файлов , поскольку вы допустили немало основных ошибок, обрабатывая массив $ _FILES или, скорее, НЕ обрабатывая массив $ _FILES

2. @RiggsFolly Я думаю, что мой вопрос неполный, мои изображения получены из dom (data: image), затем я декодирую его в base64

3. у вас pathinfo() есть точка вместо запятой, разделяющей аргументы функции.

4. В этом случае вы можете добавить вывод из a print_r($_POST); к вашему вопросу

Ответ №1:

Существует проблема с синтаксисом, которую анализатор не обнаружил бы.

$file = pathinfo( $staticName . PATHINFO_EXTENSION);

изменить на

$file = pathinfo( $staticName , PATHINFO_EXTENSION);

однако ваше следующее использование $file кажется недопустимым, создавая искаженное имя файла для file_put_contents() вызова. Указав PATHINFO_EXTENSION , что вы выбираете только расширение из имени файла, которое, похоже, не существует.