Удаляем префикс к загружаемым на сервер файлам в DLE

Удаляем префикс к загружаемым на сервер файлам в DLEПри загрузке любого файла на сайт DLE добавляет префикс к файлу в формате unixtime (например 1266540926_yandex.jpg).
Данный хак позволяет не только убрать префикс перед именем файла, а так же будет проверять существует ли файл с таким же именем в этой же папке и в этом случае добавит к нему суффикс 1,2,3 и т.д.
Например: yandex.jpg, yandex1.jpg, yandex2.jpg
В блоге WordPress суффиксы к имени файла добавляются таким же образом.

Ставится данный хак очень просто, для этого потребуется отредактировать следующие файлы:
./engine/ajax/upload.php
./engine/inc/files.php

В файлах ./engine/ajax/upload.php и ./engine/inc/files.php
Ищем код:
$file_prefix = time() + rand( 1, 100 );
$file_prefix .= "_";
и заменяем его на:
$file_prefix = '';

Если на Ваш сайт добавляют новости через программы AddNews и подобные, то на это место вставьте следующий код:
$file_prefix = '_';
Дело в том, что данные программы видят только файлы с именами _filename.jpg
При желании можете написать адрес своего сайта, например:
$file_prefix = 'site_ru_';


Далее в файле ./engine/ajax/upload.php ищем:
$image_name = totranslit( implode( ".", $img_name_arr ) ) . "." . $type;

Если ничего не найдено, пробуем так:
$image_name = totranslit( convert_unicode( implode( ".", $img_name_arr ), $config['charset'] )  ) . "." . $type;

И заменяем на:
$image_name = totranslit( implode( ".", $img_name_arr ) );
$number = '';
while ( file_exists( $upload_path . $file_prefix . $image_name . $number . '.' . $type ) ) {
    $number = $number+1;
}
$image_name = totranslit( convert_unicode( implode( ".", $img_name_arr ), $config['charset'] )  ) . $number . '.' . $type;


В файле ./engine/inc/files.php ищем:
$image_name = totranslit( implode( ".", $img_name_arr ) ) . "." . $type;
И заменяем на:
$image_name = totranslit( implode( ".", $img_name_arr ) );
$number = '';
while ( file_exists( $config_path_image_upload . $file_prefix . $image_name . $number . '.' . $type ) ) {
    $number = $number+1;
}
$image_name =  $image_name . $number . '.' . $type;
Данная строка встретится 2 раза, поэтому заменяйте её везде!

Далее ищем:
if( $serverfile == '' ) {
И перед этим кодом вставляем:
$img_name_arr = explode( ".", $image_name );
$type = end( $img_name_arr );
$curr_key = key( $img_name_arr );
unset( $img_name_arr[$curr_key] );
$image_name = implode( ".", $img_name_arr );
$number = '';
while ( file_exists( ROOT_DIR . "/uploads/files/" . $file_prefix . $image_name . $number . '.' . $type ) ) {
    $number = $number+1;
}
$image_name =  $file_prefix . $image_name . $number . '.' . $type;


Кому лень редактировать файлы выкладываю готовые файлы (для DLE 8.5): upload_files.zip [21.78 Кб] (cкачиваний: 249)

Теги: DLE, Скрипты
Последние изменения: 9 августа 2013

Причина: Проверено в DLE 9.3


zoom711 (11 марта 2010 01:03) #1
Реально полезный хак, пользователям которые скачивают мои файлы думаю будет удобнее =)
[цитировать]


Tomaas (17 марта 2010 12:34) #2
Вы вообще тестируете???
Вообще на первый взгляд всё работает, НО!!!! если вы загрузили картинку простой загрузкой, а потом под этим же именем загружаете картинку через флеш мультизагрузчик, выпадает ошибка и нечего далее негрузит!!!!

Вот флеш дебуггер выдаёт такой еррор:
Error #2044: Unhandled IOErrorEvent:. text=Error #2038: File I/O Error.
[цитировать]


WhyMax (17 марта 2010 14:58) #3
Tomaas,
Если будете общаться со всеми в такой форме, то не ждите ни от кого взаимной вежливости.
Откройте яндекс и почитайте что у Вас за ошибка. Если не произвести некоторые изменения в файле upload.php, то загрузчик просто напишет что файл уже существует (ошибка 500) и дальше все прекрасно грузит.

В файле upload.php замените
$config_path_image_upload
на
$upload_path
На сторонних ресурсах админы исправят это не скоро.
[цитировать]


Tomaas (17 марта 2010 23:42) #4
Ничего плохого неимел, просто удивлиают мениа лиуди которые выкладывают хацк недоработов его... Сам постоянно поправалиаю, чиутли не каздый новый хацк... а про бацкдоорсы и кодировку кода вообше молчиу... Хацк кстати очен даже полезный на мой взглиад!
[цитировать]


WhyMax (18 марта 2010 07:18) #5
Tomaas,
А меня удивляют люди, которые поставив мод или хак пишут что ничего не работает, не ставьте его ни в коем случае! Я бы не дублировал сообщения, по 2 раза тоже отвечать не буду acute
И не важно красиво код выглядит или нет, DLE все равно превратит табуляторы в пробелы.
Не знаю что вам там не нравится с кодировкой, convert_unicode стандартная функция движка.
Авторы для этого и выкладывают свои наработки, чтобы в них нашли баги.
Я бы не говорил что это баг, а просто не доработка, т.к. сам мультизагрузкой почти не пользуюсь. В таком случае можно было вежливо попросить меня доработать хак.
[цитировать]


WiseBird (27 марта 2010 00:43) #6
И баг-фикс к данному хаку.
В случае использования префикс хак не работает, т.к. имя файла по инструкции выше сверяется БЕЗ учёта префикса.
В приведённом в посте коде перед:
. $image_name . $number . '.' . $type ) ) {

Добавить:
. $file_prefix
[цитировать]


WhyMax (27 марта 2010 11:03) #7
WiseBird,
Спасибо, исправлено.
[цитировать]


Jio (24 апреля 2010 07:17) #8
Админ спасибо большое за хак, очень полезный.
[цитировать]


lex111 (26 мая 2010 20:11) #9
хех а в массовой загрузке, у картинок префикс не изменеется как исправить?
[цитировать]


WhyMax (27 мая 2010 18:32) #10
lex111,
По вашему префикс должен как-то изменяться?
Не путайте префикс (до имени файла) и суффикс (после имени).

С массовой загрузкой все в порядке, если файл уже существует, то префикс добавляется.
Если Вы нашли мой мод на каком-либо другом сайте - это Ваши проблемы, т.к. на них как раз версия со всеми возможными багами negative
[цитировать]


lex111 (28 мая 2010 21:17) #11
упс моя ошибка, извините баши подправил
[цитировать]


timur22 (7 июля 2010 17:05) #12
РЕбят подскажите как добавить префикс разным файлам В инете пошарил к картинкам получается добавить префикс а к другим не хочет
[цитировать]


WhyMax (12 июля 2010 11:10) #13
timur22,
В файле ./engine/inc/files.php ищем:
$image_name = $image_name . $number . '.' . $type;

if( $serverfile == '' ) {

Заменяем на:
$image_name = $file_prefix . $image_name . $number . '.' . $type;

if( $serverfile == '' ) {

Инструкции и измененные файлы для DLE 8.5 исправил.
[цитировать]


timur22 (14 июля 2010 19:57) #14
в files.php ставлю $file_prefix = '[site.ru]'; и уже тупо отображает тока ссылку а не картинку а если ставлю $file_prefix = 'site.ru_'; то всё норм Не подскажете как скобки квадратные потсавить ТАк красивее ^^
[цитировать]


WhyMax (14 июля 2010 22:56) #15
[img]http://whymax.ru/uploads/posts/2010-07/[site.ru]filename.gif[/img]

С квадратными скобками ничего не выйдет, DLE не парсит BB тег.
[цитировать]


timur22 (14 июля 2010 23:27) #16
а сейчас при загрузке файла появляется номер_site_имяфайла НЕльзя как нить убрать этот номер? и ещё вопросик а какой должен быть путь у загружаемого файла(не картинка) в новости?
[цитировать]


WhyMax (15 июля 2010 02:37) #17
Незнаю а каком номере идет речь, данный мод как раз убирает этот префикс.
Читайте описание или используйте готовые файлы, никаких лишних префиксов нет!

Вопрос насчет пути не понял, файлы загружаются в папку ./uplodas/files/ префикс такой же, как и у изображений.
[цитировать]


Виця:) (4 августа 2010 23:57) #18
Проблема при установке.... Пишу в асю, мне автор не отвечает. :(
Моя ася 545894. автор отпишись.
[цитировать]


WhyMax (6 августа 2010 13:33) #19
Виця:),
Пишите в комментариях или в обратную связь, в ICQ сейчас бываю редко, да и антиспам никого не пропускает.
[цитировать]


Гитарист (14 ноября 2010 18:29) #20
Подскажите как быть с 9 версией при массовой загрузки все работает, но если пробывать загрузить стандартно префиксы добавляются все равно.
[цитировать]


WhyMax (2 апреля 2011 15:00) #21
odine,
извините, порно ссылкам тут не место.

В версии 9.2 и 9.3 проверил, все работает (см. изменения в коде), возможно Вы не везде заменили код.
[цитировать]


Александр (29 сентября 2011 20:38) #22
Спасибо, у меня на 9 версии все нормально работает.
От души!
[цитировать]


Lex (16 октября 2011 17:35) #23
В версии 9.2 и 9.3 проверил, все работает

Обновился с 9,2 до 9,4, переустановил ваш замечательный модуль, но образовалась маленькая проблема:
а так же будет проверять существует ли файл с таким же именем в этой же папке и в этом случае добавит к нему суффикс 1,2,3 и т.д.

при повторении имени файла происходит ошибка загрузки

В файле ./engine/inc/files.php ищем:
$image_name = totranslit( implode( ".", $img_name_arr ) ) . "." . $type;
Данная строка встретится 2 раза, поэтому заменяйте её везде!

Второй раз эта строка в 9,4 выглядит по другому.
[цитировать]


Борисов (15 декабря 2011 12:36) #24
Этот хак не работает под 9.4 ;(
[цитировать]


Styv (5 января 2012 21:12) #25
Вот здесь версия хака который работает на всех версиях DLE delete
[цитировать]


WhyMax (5 января 2012 22:29) #26
Styv,
По Вашей ссылке одна из старых версий моего хака.
Во всех версиях он работать не будет, в DLE очень часто делают какие-то изменения в файлах, отвечающих за загрузку.
Я уже давно подзабил на DLE, постараюсь обновить в ближайшее время.
[цитировать]


odleg (27 июня 2012 14:12) #27
В DLE-9.6 вообще таких строк для исправления не нашел.Может что подскажите.До версии 9.2 проблем не было.
Спасибо !
[цитировать]


Myrena (28 октября 2012 09:25) #28
Отличный хак, только хотелось бы, чтобы вместо kak_prekratit_otnosheniya1.jpg
было
kak_prekratit_otnosheniya_1.jpg
[цитировать]


prettywonam (2 мая 2013 23:10) #29
Myrena, а в новой версии DLE-9.8 как ???
[цитировать]


Сергей (3 июля 2013 14:03) #30
На 10.0 не работает :( Адаптируйте, пожалуйста!
[цитировать]

Добавление комментария

Код: Включите эту картинку для отображения кода безопасности
обновить, если не виден код
Введите код