|
|
|
| Собственно, как загрузить на сервер архив zip или rar и сформировать ссылку на него для последующего вывода? При этом хорошо бы его переимновать и проверить на то, что это не файл с кодоом замаскирован под .zip или rar, а именно архив? | |
|
|
|
|
|
|
|
для: vvz
(30.05.2009 в 23:00)
| |
if (!empty($_FILES['filename']['tmp_name']))
{
// Формируем путь к файлу
$path = "files/".date("YmdHis",time());
// Если оператор пожелал переименовать файл - переименовываем
if($_POST['chk_rename'] == "on")
{
// Проверяем, чтобы не было прямых и обратных слешей
$_POST['rename'] = str_replace("\\","",$_POST['rename']);
$_POST['rename'] = str_replace("/","",$_POST['rename']);
$_POST['rename'] = stripcslashes($_POST['rename']);
$path = "files/".substr($_POST['rename'], 0, strrpos($_POST['rename'], "."));
}
// Проверяем, не является ли файл скриптом
$extentions = array("#\.php#is",
"#\.phtml#is",
"#\.php3#is",
"#\.html#is",
"#\.htm#is",
"#\.hta#is",
"#\.pl#is",
"#\.xml#is",
"#\.inc#is",
"#\.shtml#is",
"#\.xht#is",
"#\.xhtml#is");
// Извлекаем из имени файла расширение
$ext = strrchr($_FILES['filename']['name'], ".");
$add = $ext;
foreach($extentions AS $exten)
{
if(preg_match($exten, $ext)) $add = ".txt";
}
$path .= $add;
// Перемещаем файл из временной директории сервера в
// директорию /files Web-приложения
if (copy($_FILES['filename']['tmp_name'], "../".$path))
{
// Уничтожаем файл во временной директории
@unlink($_FILES['filename']['tmp_name']);
// Изменяем права доступа к файлу
@chmod("../".$path, 0644);
}
else
{
links ("Нет файла для загрузки");
}
|
Один из вариантов. | |
|
|
|
|
|
|
|
для: Rolex
(02.06.2009 в 16:00)
| | Спасибо! Выручили. | |
|
|
|
|
|
|
|
для: Rolex
(02.06.2009 в 16:00)
| | Дело, конечно, хозяйское
Но, например, но я бы немного изменил алгоритм:
для начала проверка расширения на .rar и .zip, затем переименование файла (я брал первые 12 символов времени)
А удалять временный файл вообще, по-моему, не имеет смысла - он удаляется в любом случаи, при завершении скрипта | |
|
|
|
|
|
|
|
для: Rolex
(02.06.2009 в 16:00)
| | Вместо copy - move_upload_file()
Проверять ну жно не на то, является ли файл скриптом или еще чем-то, а на то что нужно, в данном случае, zip, rar, bz2, gzip ...
Убарите цикл - есть же in_array(); | |
|
|
|
|
|
|
|
для: mihdan
(07.06.2009 в 23:39)
| | >Убарите цикл - есть же in_array();
Уберите in_array() - есть же [ ] и isset | |
|
|
|
|
автор: 34234 (08.06.2009 в 00:22) |
|
|
для: Trianon
(08.06.2009 в 00:20)
| | Это просто некрасиво, пусть и быстрее. | |
|
|
|
|
|
|
|
для: 34234
(08.06.2009 в 00:22)
| | Красота - понятие субъективное.
С моей точки зрения, некрасиво заставляять систему выполнять дорогостоящий последовательный поиск по массиву вместо того, чтобы определить наличие элемента практически мгновенным хеш-поиском ключа.
Off. А еще, опять же - с моей точки зрения - некрасиво оставлять неавторизированные сообщения, как минимум без должной причины. | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2009 в 12:42)
| | >некрасиво оставлять неавторизированные сообщения, как минимум без должной причины.
солидарен | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2009 в 00:20)
| | Или так, ну уж точно не циклом )) | |
|
|
|