Антон Добряков
21 сообщение
#15 лет назад
Здравствуйте. Столкнулся с такой проблемой. Закачиваю картинку через multipart форму, проверяю на существование файла в tmp директории и после этого с помощью функции move_uploaded_file() перемещаю картинку в нужную папку (777). Картинка битая... Подскажите в чем может быть проблема. Заранее благодарен.
Антон Добряков
21 сообщение
#15 лет назад
Сразу код приведу:
				if (file_exists($_FILES))
if(preg_match('{image/(.*)}is', $_FILES, $p)){
$name = '../images/'.time().'.'.$p;
move_uploaded_file($_FILES, $name);
}
Никита К.
1594 сообщения
#15 лет назад
Разрешение надо оставлять то же, что и у загружаемой картинки. Надо либо отрезать substr'ом или explode'ом по точке, либо узнавать mime-тип и вставлять соответственно разрешение. Ещё лучше - имя файла оставлять =)
Антон Добряков
21 сообщение
#15 лет назад
Anexroid. Ты на код вообще смотрел?

preg_match('{image/(.*)}is', $_FILES, $p);

В $p и будет РАСШИРЕНИЕ. Если ты не в курсе это не то же самое что РАЗРЕШЕНИЕ.Цитата ("Anexroid"):
Разрешение
Иван П.
3 сообщения
#15 лет назад
amatory666,
$image = $_FILES;
if( isset( $image ) && $image != '' )
{
//Upload new image
$name = '../images/'.time().'.'.getFileExt( $image );
move_uploaded_file( $image, $name );
}

function getFileExt( $filename )
{
return end( explode(".", $filename) );
}
Антон Добряков
21 сообщение
#15 лет назад
ZZZubec, Теже яйца только в профиль.
Максим Б.
203 сообщения
#15 лет назад

Цитата:
Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки.

<Location />
CharsetRecodeMultipartForms Off
</Location>

Строку CharsetRecodeMultipartForms Off можно добавлять в разные места (один раз). Если вы совсем начинающий пользователь и не решите сами, куда писать эту строку, будьте аккуратнее при решении задачи методом тыка.
Антон Добряков
21 сообщение
#15 лет назад
maxim_belkin, а только через httpd.conf можно исправить эту проблему?
Максим Б.
203 сообщения
#15 лет назад
Не знаю, я сам никогда не сталкивался с этой проблемой.
Попробуйте указать это в .htaccess
CharsetRecodeMultipartForms Off
Никита К.
1594 сообщения
#15 лет назад
Оффтопик
Ну, не так написал... Имел ввиду то я расширение...
Максим Б.
203 сообщения
#15 лет назад

Цитата:
Была такая же проблема.... И встает постоянно при использовании разных хостингов ;-)
Лечу ее так
в .htaccess в корне сайта вставляю следующий текст

<IfModule mod_charset.c>
CharsetDisable on
# CharsetSourceEnc windows-1251
#Posible values: windows-1251 koi8-r
#Or for disable: CharsetDisable on
</IfModule>

Проблема исчезает.....
Антон Добряков
21 сообщение
#15 лет назад
maxim_belkin, спасибо большое. Помогло.
Артем Л.
11416 сообщений
#15 лет назад
Возьмем на заметку
Евгений Б.
5330 сообщений
#15 лет назад
Function send_mail($admin, $body, $filename)
{
$subject = '=?windows-1251?B?'.base64_encode(utf8_win('New messages from agro-rus.ru').'?=';
$boundary = "--".md5(uniqid(time())); // генерируем разделитель
$headers = "From: ".strtoupper($_SERVER)." <".$admin.">\r\n";
$headers .= "Return-path: <".$admin.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
$multipart = "--".$boundary."\r\n";
$multipart .= "Content-type: text/plain; charset=\"windows-1251\"\r\n";
$multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

$body = quoted_printable_encode( $body )."\r\n\r\n";

$multipart .= $body;

$file = '';
if ( !empty( $filename ) ) {
$fp = fopen($filename, "r";
if ( $fp ) {
$content = fread($fp, filesize($filename));
fclose($fp);
$file .= "--".$boundary."\r\n";
$file .= "Content-Type: application/octet-stream\r\n";
$file .= "Content-Transfer-Encoding: base64\r\n";
$file .= "Content-Disposition: attachment; filename=\"".$_FILES."\"\r\n\r\n";
$file .= chunk_split(base64_encode($content))."\r\n";
}
}
$multipart .= $file."--".$boundary."--\r\n";

if( mail($admin, $subject, $multipart, $headers) )
return true;
else
return false;
}