X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> запрет загрузки файла на русском языке
Электроник
Электроник
Topic Starter сообщение 6.7.2010, 20:08; Ответить: Электроник
Сообщение #1


привет всем!
для загрузки файлов на сервер, я использую такой код
<form enctype="multipart/form-data" action="upload.php" method="post">
<input name="userfile" type="file" /><input type="reset" value="Очистити" />
<input type="submit" id="submit" value="" style="border:1px solid #cccccc; width:110px; height:25px; background-image:url(images/knopzagruzit.gif);" />
</form>
[php]<?php
$uploaddir = 'img_r/'; // Папка куда закачивать файлы
$extentions = array(".gif",".jpg",".zip",".rar"); // Массив разрешенных форматов файлов
$userfilesize = $_FILES['userfile']['size']; // Вычисление размера загружаемого файла
$maxfilesize = 100000000; // Максимально допустимый размер файла

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if((in_array(strrchr($_FILES['userfile']['name'], "."),$extentions)) && ($maxfilesize >= $userfilesize)) //
{
// Если копирование произведено удачно, выводим сообщения
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) //
{
$fname = ($_FILES['userfile']['name']); // Вычисление имени файла и присвоение переменной

$fname01 = $fname;

echo "Ваш файл: <a href='http://localhost/podpiska/img_r/$fname1'>$fname01</a>";
chmod("img_r/$fname",0644);
}
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>");
exit();
}
?> [/php]всё хорошо работает, но мне очень нужно сделать так, чтобы, если загружается файл с названием на русском языке (на кириллице), выводилось сообщение, что так делать нельзя.
то есть исключить возможность загрузки файла на русском языке, на сервер. как мне переделать этот код, чтобы всё работало как надо?

(сайт который я делал наверно уже закончен, все ошибки исправлены, он загружен на сервер и работает, но вчера самый главный администратор сайта, закинул на сервер файл с таким названием: ПВХ водопровод. напорные раструбные 2008 2008.rar, хорошо хоть хостинг у сайта неплохой, админы помогли удалить этот файл)
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
сообщение 8.7.2010, 5:43; Ответить: Licoric
Сообщение #2


Переименовывай файл во что-то другое. Оригинал имени - в базу (или еще куда нибудь). При скачивании просто подставляй. Ну это как один из вариантов.
ps $maxfilesize = 100000000; // Максимально допустимый размер файла
удобней писать как
$maxfilesize = 1024*1024*95; Где 95 - количество допустимых мегабайт.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 8.7.2010, 10:31; Ответить: ZhukV
Сообщение #3


Я к примеру использую вот такую функцию:
[PHP]
/*---------------------------------------------------------
Функция перекодирования строки из кирилицы в латиницу и
наоборот
---------------------------------------------------------*/
function strToCyrilic($text = "", $convert = "cyr"){
$STR_ARRAY = array(" " => "_","а"=>"a","б"=>"b","в"=>"v","г"=>"h","д"=>"d","е"=>"e","є"=>"ye","ж"=>"zh","и"=>"u","і"=>"i","з"=>"z","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"y","ф"=>"ph","х"=>"h","ц"=>"tc","ч"=>"ch","ш"=>"sh","щ"=>"sh","ь"=>"","ю"=>"yu","я"=>"ya","э"=>"e","ы"=>"u","ъ"=>"");
$convert = strtoupper($convert);
$K["RUS"] = array_keys($STR_ARRAY);
$K["CYR"] = array_values($STR_ARRAY);
if($convert == "CYR"){
return str_replace($K["RUS"],$K["CYR"],$text);
} else if($convert == "RUS"){
return str_replace($K["CYR"],$K["RUS"],$text);
}
}
[/PHP]
Надеюсь, что ее сутность понятна.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 8.7.2010, 10:48; Ответить: Arks
Сообщение #4


[PHP]
function encodestring($text) {
$searchurl = array("а", "б","в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "А", "Б","В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", " ");
$replaceurl = array("a", "b","v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "w", "tz", "y", "mz", "je", "ju", "ja", "A", "B","V", "G", "D", "E", "JO", "ZH", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "CH", "SH", "W", "TZ", "Y", "MZ", "JE", "JU", "_");
$text = str_replace($searchurl, $replaceurl, $text);
return $text;
}
[/PHP]


ZhukV, не надо делать два лишних массива
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 9.7.2010, 21:24; Ответить: Mulder_hb
Сообщение #5


Если задача стоит лишь в запрете кирилических имен, то можно прогонять эти имена через регулярку, вроде этой:
/[а-я]+/is

Если есть результат, то в имени есть кирилические буквы.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Электроник
Электроник
Topic Starter сообщение 14.7.2010, 19:17; Ответить: Электроник
Сообщение #6


что это с форумом происходит? как будто бд тормозит, хостинг паршивый?
обычно с ответами не густо, а тут столько, у меня наверно день рождения :)
Licoric спасибо за вариант, на счёт удобнее писать, тут с тобой согласен (я методом тыка просчитывал сколько нужно нулей написать для 7.5 мегабайт:)
ZhukV точно не помню, но кажется это вы эту форму загрузки, где-то на форуме выкладывали, если это так то спасибо за неё ещё раз. сутность понятна от части :)
Arks воспользовался вашим вариантом, спасибо за него (его мне проще понять, чем остальные)
здравствуйте Mulder, вопрос конечно стоял о запрете, и тут вы правы, но я тогда не подумал о варианте переименования названий, а теперь думаю, он подходит больше чем просто запрет. и честно говоря не знаю что такое регулярка, я только учусь, информации много, и не всё понятно, осваиваю постепенно, спасибо за помощь

сделал вот так:
[php]<?php
$uploaddir = 'img_r/'; // Папка куда закачивать файлы
$extentions = array(".gif",".jpg",".zip",".rar"); // Массив разрешенных форматов файлов
$userfilesize = $_FILES['userfile']['size']; // Вычисление размера загружаемого файла
$maxfilesize = 100000000; // Максимально допустимый размер файла

function encodestring($text) {
$searchurl = array("а", "б","в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "А", "Б","В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", " ");
$replaceurl = array("a", "b","v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "w", "tz", "y", "mz", "je", "ju", "ja", "A", "B","V", "G", "D", "E", "JO", "ZH", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "CH", "SH", "W", "TZ", "Y", "MZ", "JE", "JU", "_");
$text = str_replace($searchurl, $replaceurl, $text);
return $text;
}

$do = basename($_FILES['userfile']['name']);
$posle = encodestring($do);
$uploadfile = $uploaddir . $posle;

if((in_array(strrchr($_FILES['userfile']['name'], "."),$extentions)) && ($maxfilesize >= $userfilesize)) //
{
// Если копирование произведено удачно, выводим сообщения
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) //
{
$fname = ($_FILES['userfile']['name']); // Вычисление имени файла и присвоение переменной

$fname1 = encodestring($fname);
$fname01 = encodestring($fname);

echo "Ваш файл: <a href='http://localhost/podpiska/img_r/$fname1'>$fname01</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>");
exit();
}

?>
[/php]на локальном сервере всё работает отлично,
а не на локальном как должно, не работает
закидываю это:

  1. цветочек.rar
  2. цветочек .rar
  3. цветочек frd.gif
  4. sss цветочек.rar

на сервере это:
  1. .rar
  2. _.rar
  3. _frd.gif
  4. sss_cvetochek.rar

как думаете почему так?
я неправильно сделал?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 15.7.2010, 1:02; Ответить: Apay
Сообщение #7


кодировка страницы какая? если все в utf-8, то str_replace может не пройти, как и strrchr
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Электроник
Электроник
Topic Starter сообщение 15.7.2010, 2:49; Ответить: Электроник
Сообщение #8


(Apay @ 15.7.2010, 04:02) *
кодировка страницы какая? если все в utf-8, то str_replace может не пройти, как и strrchr

я не знаю как определить кодировку страницы
в сообщении выше, там где написано:
сделал вот так:
PHP код:
в приведённом коде и есть всё содержимое страницы
кодировка там не указанна, но ведь она должна же быть, тогда как её узнать?
пыс: можно ли в Notepad++ проверить кодировку, если да то как
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 15.7.2010, 8:43; Ответить: Apay
Сообщение #9


все зависит от странички где форма, поставте там (если нет) доктайп и мета-контент-тайп
немного переделал, так работает в утф8
[PHP]<!DOCTYPE html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
define( 'MAXFILESIZE', 100000000 );
define( 'UPLOADDIR', 'img_r/' );
define( 'EXTENTIONS', '#\\.(gif|jpe?g|zip|rar)#ui' );

function encodestring_utf8( $text){
static
$s = array( '#а#u', '#б#u','#в#u', '#г#u', '#д#u', '#е#u', '#ё#u', '#ж#u', '#з#u', '#и#u', '#й#u', '#к#u', '#л#u', '#м#u', '#н#u', '#о#u', '#п#u', '#р#u', '#с#u', '#т#u', '#у#u', '#ф#u', '#х#u', '#ц#u', '#ч#u', '#ш#u', '#щ#u', '#ъ#u', '#ы#u', '#ь#u', '#э#u', '#ю#u', '#я#u', '#А#u', '#Б#u','#В#u', '#Г#u', '#Д#u', '#Е#u', 'Ё', '#Ж#u', '#З#u', '#И#u', '#Й#u', '#К#u', '#Л#u', '#М#u', '#Н#u', '#О#u', '#П#u', '#Р#u', '#С#u', '#Т#u', '#У#u', '#Ф#u', '#Х#u', '#Ц#u', '#Ч#u', '#Ш#u', '#Щ#u', '#Ъ#u', '#Ы#u', '#Ь#u', '#Э#u', '#Ю#u', '# #u' ),
$r = array( 'a', 'b','v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'w', 'tz', 'y', 'mz', 'je', 'ju', 'ja', 'A', 'B','V', 'G', 'D', 'E', 'JO', 'ZH', 'Z', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'CH', 'SH', 'W', 'TZ', 'Y', 'MZ', 'JE', 'JU', '_');
return preg_replace( $s, $r, $text );
}

$err = '';

if( ! preg_match( EXTENTIONS, $_FILES['userfile']['name'] ) )
$err = 'Файл имеет недопустимое расширение!';
elseif( MAXFILESIZE < $_FILES['userfile']['size'] )
$err = 'Превышен максимальный размер файла!';
else{
$filename = encodestring_utf8( $_FILES['userfile']['name'] );
if( ! move_uploaded_file( $_FILES['userfile']['tmp_name'], UPLOADDIR.$filename ) )
$err = 'Ошибка при передаче файла на сервер!';
}

echo $err
? '<script type="text/javascript">alert("'.$err.'");history.back();</script>';
: 'Ваш файл: <a href="http://localhost/podpiska/img_r/"'.$filename.'">'.$filename.'</a>';

?>
</body>
</html>
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Электроник
Электроник
Topic Starter сообщение 15.7.2010, 14:40; Ответить: Электроник
Сообщение #10


взвесил всё и наверно оставлю как есть (мозги кипят)
надеюсь у меня там всё правельно, и хоть как-то но работать будет
спасибо Apay и хорошего вам дня!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужны тексты на английском языке
драгоценные камни
4 GlazAlmaz 2395 20.8.2023, 4:29
автор: projectadmin
Открытая тема (нет новых ответов) Пишу статьи на русском – Опыт 10+ лет, от 100₽ за 1000 знаков
9 duoseo 1744 28.6.2023, 10:08
автор: duoseo
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыКопирайтинг и рерайтинг на английском языке
seo копирайтинг, написание статей на английском языке
42 D007 19956 30.5.2023, 12:07
автор: D007
Горячая тема (нет новых ответов) Текст для сайта на английском языке
33 D007user 18110 26.1.2022, 17:16
автор: D007
Открытая тема (нет новых ответов) нужен копирайтер на русском (крипта, сра)
написание кейсов
0 caa 1523 16.2.2021, 14:09
автор: caa


 



RSS Текстовая версия Сейчас: 20.4.2024, 16:33
Дизайн