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