PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: теряеться расширение файла при загрузки на сайт картинок
Поиск в теме | Версия для печати
sir1006
Отправлено: 19 Февраля, 2015 - 13:05:24
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
PHP:
скопировать код в буфер обмена
<?PHP
//Загрузка фоток
$uploaddir = 'uploads/' ; // Папка куда закачивать файлы
$extentions = array ( ".BMP" , ".bmp" , ".GIF" , ".gif" , ".JPEG" , ".jpeg" , ".JPG" , ".jpg" , ".JPE" , ".PNG" , ".png" ) ; // Массив разрешенных форматов файлов $userfilesize = $_FILES [ 'userfile' ] [ 'size' ] ; // Вычисление размера загружаемого файла
$maxfilesize = 20000000 ; // Максимально допустимый размер файла
$uploadfile = $uploaddir . basename ( $_FILES [ 'userfile' ] [ 'name' ] ) ;
if ( ( in_array ( strrchr ( $_FILES [ 'userfile' ] [ 'name' ] , "." ) , $extentions ) ) && ( $maxfilesize >= $userfilesize ) ) // {
// Если копирование произведено удачно, выводим сообщения
{
$fname = md5 ( $_FILES [ 'userfile' ] [ 'name' ] ) ; // Вычисление имени файла и присвоение переменной echo "Ваш файл: <a href='../uploads/$fname '>$fname </a>" ;
}
else
{
echo ( "<script language=\" javascript\" >alert(\" Ошибка при передаче файла на сервер!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
}
// Если превышен максимальный размер файла
elseif ( $maxfilesize < $userfilesize )
{
echo ( "<script language=\" javascript\" >alert(\" Превышен максимальный размер файла!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
else
{
// Если расширение файла имеет недопустимое расширение
echo ( "<script language=\" javascript\" >alert('Файл имеет недопустимое расширение!');</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
# переадресация на
echo '<script type="text/javascript">
window.location = "wiv.php"
</script>' ;
//Показ фоток
?>
Проблема такова что ни как не могу добиться того, чтоб при изменении basename на md5 получаеться что имена берутся из хэша картинки и так он их сохраняет на сайте, но проблема в том, что теряется расширения.
Как искоренить эту ошибку??
или посоветуйте готовое решение:
1)загрузка картинки
2)переименование ее (чтоб имена не повторялись)
3)сохранялось расширение
4)загружалась на сайт
exlant
Отправлено: 19 Февраля, 2015 - 14:38:16
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
это если по быстрому написать исходя из вашего кода,
PHP:
скопировать код в буфер обмена
$uploaddir = 'uploads/' ; // Папка куда закачивать файлы
$extentions = array ( ".BMP" , ".bmp" , ".GIF" , ".gif" , ".JPEG" , ".jpeg" , ".JPG" , ".jpg" , ".JPE" , ".PNG" , ".png" ) ; // Массив разрешенных форматов файлов $userfilesize = $_FILES [ 'userfile' ] [ 'size' ] ; // Вычисление размера загружаемого файла
$maxfilesize = 20000000 ; // Максимально допустимый размер файла
if ( ( $format = array_search ( strrchr ( $_FILES [ 'userfile' ] [ 'name' ] , "." ) , $extentions ) ) && ( $maxfilesize >= $userfilesize ) ) // {
// Если копирование произведено удачно, выводим сообщения
$fname = md5 ( $_FILES [ 'userfile' ] [ 'name' ] ) ; $uploadfile = $uploaddir . $fname . $extentions [ $format ] ;
{
echo "Ваш файл: <a href='../uploads/" , $fname , $extentions [ $format ] , "'>" , $fname , $extentions [ $format ] , "</a>" ;
}
else
{
echo ( "<script language=\" javascript\" >alert(\" Ошибка при передаче файла на сервер!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
}
// Если превышен максимальный размер файла
elseif ( $maxfilesize < $userfilesize )
{
echo ( "<script language=\" javascript\" >alert(\" Превышен максимальный размер файла!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
else
{
// Если расширение файла имеет недопустимое расширение
echo ( "<script language=\" javascript\" >alert('Файл имеет недопустимое расширение!');</script>" ) ;
</script> ");
echo (" <script language = \"javascript\" >history.back();</script>" ) ;
}
# переадресация на
echo '<script type="text/javascript">
window.location = "wiv.php"
</script>' ;
//Показ фоток
у вас изначально ошибка в коде, вы с начало переносите файл к себе в папку сайта, и сохраняете с его же именем
а потом хешируете его название функцией md5, и пытаетесь вызвать этот хеш, как какой то файл, а его вообще не существует!
PHP:
скопировать код в буфер обмена
$fname = md5 ( $_FILES [ 'userfile' ] [ 'name' ] ) ; // Вычисление имени файла и присвоение переменной echo "Ваш файл: <a href='../uploads/$fname '>$fname </a>" ;
функция md5 не вычисляет никакого имени файла! читайте доки! она хеширует, и в конце хеша не будет никакого формата/разрешения, если его туда явно не указать
Цитата:
2)переименование ее (чтоб имена не повторялись)
md5 будет одинаковый для одинакового названия файла, другими словам он не будет уникален,
упс немного урезал, поправил(Отредактировано автором: 19 Февраля, 2015 - 14:41:28)
sir1006
Отправлено: 19 Февраля, 2015 - 15:38:11
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
exlant спасибо, но выдает ошибку
Parse error: syntax error, unexpected end of file in /home/srv/www/upload.php on line 89
мол код php не закрыт
(Добавление)
sir1006 пишет: exlant спасибо, но выдает ошибку
Parse error: syntax error, unexpected end of file in /home/srv/www/upload.php on line 89
мол код php не закрыт
точнее говоря закрывать не хочет всегда теперь винит последнию строку
(Отредактировано автором: 19 Февраля, 2015 - 15:40:42)
GoDr
Отправлено: 19 Февраля, 2015 - 15:59:51
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015
Откуда: Тамбов
Помог: 17 раз(а)
sir1006 , посмотри стройку 33.. видимо она лишняя
(код который привёл
exlant )
-----Система управления веб-содержимым Lotos CMS
sir1006
Отправлено: 19 Февраля, 2015 - 16:20:29
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
GoDr пишет: sir1006 , посмотри стройку 33.. видимо она лишняя
(код который привёл
exlant )
пасиб дружищеееееее)
sir1006
Отправлено: 19 Февраля, 2015 - 18:27:44
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
последний вопрос как к этому аплодер с таким связать:
CODE (
html ):
скопировать код в буфер обмена
<form action = 'upload.php' method = 'post' enctype = 'multipart/form-data' >
<input name = 'file[]' type = 'file' multiple = 'true' min= '1' max= '20' / >
<input type = 'submit' value = 'Загрузить' / >
</ form >
(мульти загрузку а то ссылаеться на неверное разширение)
с одиночной то все гуд))
sir1006
Отправлено: 19 Февраля, 2015 - 22:51:44
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
exlant пишет: вы же к загруженному файлу обращаетесь как
где
userfile - и есть имя отсылаемого инпута, значит и имя у него должно быть
Ваши решения верны но не работоспособны пишет ошибка при загрузки
exlant
Отправлено: 19 Февраля, 2015 - 22:59:19
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
а можно текст ошибки тогда?
(Добавление)
и вот код который у меня на сервере работал
CODE (
html ):
скопировать код в буфер обмена
<form action = "" method = "post" enctype = "multipart/form-data" >
<input type = "file" name = "userfile" >
<input type = "submit" value = "go" >
</ form >
PHP:
скопировать код в буфер обмена
<?PHP
//Загрузка фоток
$uploaddir = 'uploads/' ; // Папка куда закачивать файлы
$extentions = array ( ".BMP" , ".bmp" , ".GIF" , ".gif" , ".JPEG" , ".jpeg" , ".JPG" , ".jpg" , ".JPE" , ".PNG" , ".png" ) ; // Массив разрешенных форматов файлов $userfilesize = $_FILES [ 'userfile' ] [ 'size' ] ; // Вычисление размера загружаемого файла
$maxfilesize = 20000000 ; // Максимально допустимый размер файла
if ( ( $format = array_search ( strrchr ( $_FILES [ 'userfile' ] [ 'name' ] , "." ) , $extentions ) ) && ( $maxfilesize >= $userfilesize ) ) // {
// Если копирование произведено удачно, выводим сообщения
$fname = md5 ( $_FILES [ 'userfile' ] [ 'name' ] ) ; $uploadfile = $uploaddir . $fname . $extentions [ $format ] ;
{
$fname = md5 ( $_FILES [ 'userfile' ] [ 'name' ] ) ; // Вычисление имени файла и присвоение переменной echo "Ваш файл: <a href='../uploads/" , $fname , $extentions [ $format ] , "'>" , $fname , $extentions [ $format ] , "</a>" ;
}
else
{
echo ( "<script language=\" javascript\" >alert(\" Ошибка при передаче файла на сервер!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
}
// Если превышен максимальный размер файла
elseif ( $maxfilesize < $userfilesize )
{
echo ( "<script language=\" javascript\" >alert(\" Превышен максимальный размер файла!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
else
{
// Если расширение файла имеет недопустимое расширение
echo ( "<script language=\" javascript\" >alert('Файл имеет недопустимое расширение!');</script>" ) ;
}
?>
это все один файл(Отредактировано автором: 19 Февраля, 2015 - 23:02:01)
exlant
Отправлено: 20 Февраля, 2015 - 00:01:38
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
во так должен работать
PHP:
скопировать код в буфер обмена
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="userfile[]" multiple="true">
<input type="submit" value="go">
</form>
<?PHP
function generatestring( $len = 32 ) { // можно выбрать количество генерируемых символов
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789' ; //строка с символами для генерации строки
$text = '' ;
$text .= $str [ mt_rand ( 0
, $str_len ) ] ;
return $text ;
}
//Загрузка фоток
$uploaddir = 'uploads/' ; // Папка куда закачивать файлы
$extentions = array ( ".BMP" , ".bmp" , ".GIF" , ".gif" , ".JPEG" , ".jpeg" , ".JPG" , ".jpg" , ".JPE" , ".PNG" , ".png" ) ; // Массив разрешенных форматов файлов $maxfilesize = 20000000 ; // Максимально допустимый размер файла
$userfile = $_FILES [ 'userfile' ] ;
$num = count ( $userfile [ 'name' ] ) ; for ( $a = 0 ; $a < $num ; $a ++ ) {
$format [ $a ] = strrchr ( $userfile [ 'name' ] [ $a ] , "." ) ; if ( ! in_array ( $format [ $a ] , $extentions ) ) { // Если расширение файла имеет недопустимое расширение
echo ( "<script language=\" javascript\" >alert('Файл имеет недопустимое расширение!');</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
if ( $userfile [ 'size' ] [ $a ] >= $userfile ) {
// Если превышен максимальный размер файла
echo ( "<script language=\" javascript\" >alert(\" Превышен максимальный размер файла!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
}
for ( $a = 0 ; $a < $num ; $a ++ ) {
$new_file_name [ $a ] = generatestring( ) . $format [ $a ] ; // имена файлов так будут уникальнее, меньше шансов на совпадение
$uploadfile [ $a ] = $uploaddir . $new_file_name [ $a ] ;
// Если копирование произведено удачно, выводим сообщения
echo "Ваш файл: <a href='../uploads/" , $new_file_name [ $a ] , "' target='_blank'>" , $new_file_name [ $a ] , "</a><br>" ;
} else {
echo ( "<script language=\" javascript\" >alert(\" Ошибка при передаче файла на сервер!\" );</script>" ) ;
echo ( "<script language=\" javascript\" >history.back();</script>" ) ;
}
}
}
?>
я тоже учусь)) практика как говориться)(Отредактировано автором: 20 Февраля, 2015 - 00:32:09)
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB