Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Загрузка файлов


Автор: Гость_Игорь 4.1.2005, 11:27
Делаю загрузку файлов определенных типов zip, doc, jpg. Если название файла на русском языке или с пробелами его потом не скачать. Как сделать что бы файл переименовывались, но при этом сохранялось расширение файла.
Например, делаю так:
Код
$upload_file_name = str_replace(".doc","($date).doc",$upload_file_name);
$upload_file_name = str_replace(".zip","($date).zip",$upload_file_name);
$upload_file_name = str_replace(".rar","($date).rar",$upload_file_name);


где $date дата отправления файла, но при этом переименовывается не весь файл, а только конец названия файла.

Как сделать чтобы переименовывался все название файла кроме расширения?

Автор: Mont 4.1.2005, 12:15
Код

$Name_file=pathinfo($upload_file_name);
$upload_file_name=($date).$Name_file["extension"];

В итоге получишь название файла ($data), а расширение то же что и было.


Добавлено @ 12:18
Упустил из виду -
Код

$upload_file_name="(".$date.").".$Name_file["extension"];


так правильней. smile
если скобки не нужны - можешь убрать, но точку (ту что справа от последней скобки) оставь

Автор: Guest 5.1.2005, 14:23
не получилось так переименовывается весь файл, а расширение пропадает.

Автор: IZ@TOP 5.1.2005, 17:06
Попробуй так:

Код

<?php

$oFileName = "hnfwhef8934[99].txt";

$date = date("dmyHis");

echo $nFileName = preg_replace("/[a-zA-Z0-9\-\.\_\)\(\[\]\{\}]*?\.([a-zA-Z0-9]*?)/ui", "new-$date.\\1", $oFileName);

?>

Автор: Guest 11.1.2005, 16:27
При этом если есть в названии файла точка получается new-data. new-data. new-data. и так далее сколько точек столько new-data. что не совсем правильно.

Автор: IZ@TOP 11.1.2005, 16:57
Код

<?php

$oFileName = "hnfwhef8934[99].txt";

$date = date("dmyHis");

echo $nFileName = preg_replace("/^[a-zA-Z0-9\-\.\_\)\(\[\]\{\}]*?\.([a-zA-Z0-9]*?)$/ui", "new-$date.\\1", $oFileName);

?>


А так?

Автор: Guest 12.1.2005, 09:08
СПАСИБО!!! так работает.
А как быть если в названии есть пробелы или русские буквы, люди могут любой файл отправить.

Автор: IZ@TOP 12.1.2005, 10:39
Код
<?php

$oFileName = "hnfwhef8934[99].txt";

$date = date("dmyHis");

echo $nFileName = preg_replace("/^.*?\.([a-zA-Z0-9]{2,8})$/ui", "new-$date.\\1", $oFileName);

?>
Попробуй так. Только расширения у файлов в таком случае будут только на английском обрабатываться, и расширение должно быть не менее 2 и не более 8 символов в длинну.

Автор: Guest 12.1.2005, 11:06
Нет не срабатывает. Если файл с пробелами или с русскими буквами переименование не происходит.

Автор: IZ@TOP 12.1.2005, 11:39
Ладно, тогда так:

Код

$e = explode('.', $oldFileName);
$ext = array_pop($e);
$newFileName = implode('.', $e).'.'.$ext;

Автор: Guest 12.1.2005, 14:55
Спасибо за помощь, но и так не срабатывает. smile

Автор: IZ@TOP 12.1.2005, 16:41
Цитата(Guest @ 12.1.2005, 15:55)
Спасибо за помощь, но и так не срабатывает.

Что значит не срабатывает? Ща проверим... блин, ты меня прям напугал!!!

Код

$oldFileName = 'фАЙЛО, NN43[01]b{1}.avi';
$e = explode('.', $oldFileName);
$date = date('dmYHi');
$ext = array_pop($e);
echo $newFileName = $date.'.'.$ext;

Автор: Guest 12.1.2005, 18:35
БОЛЬШОЕ спасибо!!!
Так работает!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)