Искажение изображений при POST multipart/form-data

Discussion in 'PHP' started by FindeR, 1 Jun 2010.

  1. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Писал пост в "вопросы по PHP", но вопрос быстро затерялся, так и не ответили. Сам в итоге так и не разобрался, поэтому создаю тему.

    Помогите разобраться.
    Была проблема с загрузкой постом файлов на сервак.
    Накидал вот такой скрипт для теста (кинул в папку с правами 777).

    PHP:
    <?php
    if (empty($_FILES["img_file"]["name"])) {
    ?>
    <form action="index.php" method="POST" enctype="multipart/form-data">
    img: <input type="file" name="img_file" />
    <input type="submit" value="Загрузить" />
    </form>
    <?php
    }
    else {

    $imageinfo getimagesize($_FILES['img_file']['tmp_name']);
     if(
    $imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/png'
    {
    echo 
    '<span style="font-size:13px;">Ошибка загрузки изображения.</span>';
    }

    else
    {
    move_uploaded_file($_FILES["img_file"]["tmp_name"], $_FILES["img_file"]["name"]);

    echo 
    '<img src="'.$_FILES["img_file"]["name"].'" />';
    }
    }
    ?> 
    На денвере всё замечательно. Загружаются jpg,gif,png.

    А вот при заливке на хостинг начинаются проблемы.

    1) При попытке загрузки jpg/jpeg вываливает "Ошибка загрузки изображения". Причём, $_FILES['img_file']['tmp_name'] не пуст! А вот getimagesize от него уже не берётся - пусто. Правда, догадываюсь, что это связано со вторым вопросом :)

    2) При загрузке оставшихся png и gif он их загружает, отрабатывается move_uploaded_file (файл появляется в папке), но вот потом нифига не отображается. В мозиллке отображается иконка повреждённого файла, в IE крестик...Если слить с сервера файл - не открывается уже. Откуда берётся эта "обработка" файла?
     
    1 person likes this.
  2. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    Я же тебе ответил как я решил проблему... Я короче все в GIF переделывал и не парился.

    Накрайняк попробуй открыть как бинарник и в каждой строке \r\n заменить на \n. Бред, но попробовать чисто ради интереса надо
     
    #2 SHiNiGaMi, 1 Jun 2010
    Last edited: 1 Jun 2010
  3. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    SHiNiGaMi, cорри, забыл там ответить.

    Если ты имеешь в виду переделывать программно, скриптом - то не катит, т.к. он не воспринимает jpg, как картинку, в принципе.
    Это одна из причин. Вторая - 256 цветов ну никак не хватает :)

    Ну и третья - gif'ы тоже не загружаются нормально. Я ж говорю, gif и png "портятся", jpg вообще не воспринимаются...

    Сравнил файлы сейчас.
    При заливке на сервак символы [​IMG] заменены на пробелы. Как это лечить?

    upd: символ 00 заменяется везде на 20
    Как вернуть 00 на родину?..
     
    #3 FindeR, 1 Jun 2010
    Last edited: 1 Jun 2010
  4. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    с 00 ты уверен :D?
     
  5. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Открыл hex-редактором, посмотрел оба файла. Отличаются только этим. Вместо 00 (NUL) везде 20 (пробел)
     
    #5 FindeR, 1 Jun 2010
    Last edited: 1 Jun 2010
  6. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    хм. а как ты заливаешь файлы? в принципе у curl никогда не было проблем с заливкой файлов и никаких особых знаний и мозгоебателсьтв, которые есть в fsockopen, там нету.
     
  7. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    GreenBear, в первом посте весь скрипт..

    Сначала постом с enctype="multipart/form-data" файл падает на сервак, в tmp.

    Потом через move_uploaded_file() кладу его, куда мне нужно. Судя по тому, что неправильно берётся getimagesize, проблема при загрузке постом.

    Есть уже готовый проект, который работает отлично на masterhost'e, сейчас вот залил на хостинг от nic.ru - такая байда.
     
    #7 FindeR, 1 Jun 2010
    Last edited: 1 Jun 2010
  8. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    стало быть проблема в хостинге.
     
    1 person likes this.
  9. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Так увлёкся поиском косяков в своём проекте, что забыл о настройках хостинга.
    Выключил charset_module, всё стало на свои места :)
    Всем спасибо, тему можно прикрыть.