Загрузка изображений в base64 и ситуация с кадрированием PHP

Я пытаюсь загрузить изображение с мобильного устройства на сервер. Мы строим с помощью PhoneGap (Javascript), поэтому нам нужно превратить его в строку, чтобы отправить на сервер. У меня возникают проблемы, когда я получаю его, чтобы превратить его обратно в читаемый файл изображения. Проще говоря, мне нужно взять строку и имя файла, присланные мне, декодировать их, преобразовать в .png, а затем обрезать в круглое изображение.

Это то, что у меня происходит в настоящее время

if (isset($_POST['file'])) 
{
    //Result variable
    $result = false;

    $pic = base64_decode($_POST['file']);
    $filename = $_POST['filename'];

    if (strlen($pic) > 9 )
    {
        $fh = fopen("/var/www/pics/events/".$filename, 'w') or die("can't open file");
        fwrite($fh, $pic);
        fclose($fh);
    }
}

Я думаю, что смогу заставить остальную часть кода работать, если я смогу понять, что я делаю здесь неправильно, из-за чего он не сохраняется должным образом в виде файла изображения? Файл загружается правильно, но сохраняется без расширения, и когда я указываю на него в своем браузере, он отображается так, как будто это должен быть файл изображения, но никогда не отображает изображение. Этот маленький сломанный значок изображения с цветными фигурами — это то, что я получаю, когда направляю его местоположение.

Нужно ли вообще знать, какой тип изображения отправляется во время этого процесса? Как узнать, является ли это форматом .gif, .jpg/jpeg, .png и т. д.?

Заранее благодарю за любую помощь!

Натан


person nathansizemore    schedule 20.10.2012    source источник


Ответы (1)


Из соображений безопасности вы должны очистить имя файла, чтобы предотвратить обход каталога.

На более яркой ноте убедитесь, что файл сохранен с правильным расширением; если вы уже сохраняете с правильным расширением, у вас может быть проблема с кодировкой из приложения.

Если ни один из предыдущих вариантов не подходит, убедитесь, что ваш размер строки не превышает максимальный размер POST в вашем php.ini; если это так, увеличьте ограничение размера.

person Darwayne    schedule 20.10.2012
comment
Был ли метод кодирования, используемый приложением. Спасибо! - person nathansizemore; 20.10.2012