Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Искажение изображений при POST multipart/form-data (https://forum.antichat.xyz/showthread.php?t=208462)

FindeR 01.06.2010 20:09

Искажение изображений при POST multipart/form-data
 
Писал пост в "вопросы по 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 крестик...Если слить с сервера файл - не открывается уже. Откуда берётся эта "обработка" файла?

SHiNiGaMi 01.06.2010 20:32

Я же тебе ответил как я решил проблему... Я короче все в GIF переделывал и не парился.

Накрайняк попробуй открыть как бинарник и в каждой строке \r\n заменить на \n. Бред, но попробовать чисто ради интереса надо

FindeR 01.06.2010 21:02

SHiNiGaMi, cорри, забыл там ответить.

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

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

Сравнил файлы сейчас.
При заливке на сервак символы http://s57.radikal.ru/i155/1006/3d/c6e68120ae4e.jpg заменены на пробелы. Как это лечить?

upd: символ 00 заменяется везде на 20
Как вернуть 00 на родину?..

Chaak 01.06.2010 21:29

с 00 ты уверен :D?

FindeR 01.06.2010 21:32

Открыл hex-редактором, посмотрел оба файла. Отличаются только этим. Вместо 00 (NUL) везде 20 (пробел)

GreenBear 01.06.2010 21:42

хм. а как ты заливаешь файлы? в принципе у curl никогда не было проблем с заливкой файлов и никаких особых знаний и мозгоебателсьтв, которые есть в fsockopen, там нету.

FindeR 01.06.2010 21:46

GreenBear, в первом посте весь скрипт..

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

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

Есть уже готовый проект, который работает отлично на masterhost'e, сейчас вот залил на хостинг от nic.ru - такая байда.

GreenBear 01.06.2010 21:54

стало быть проблема в хостинге.

FindeR 01.06.2010 22:01

Так увлёкся поиском косяков в своём проекте, что забыл о настройках хостинга.
Выключил charset_module, всё стало на свои места :)
Всем спасибо, тему можно прикрыть.


Время: 09:32