Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Ошибка при скачивании attachment, как решить?

Ошибка при скачивании attachment, как решить?


     12.10.2023    скачивание файлов, attachment    Общие вопросы, Общие вопросы по PHP, MySQL    325

вопрос
Здравствуйте.

При скачивании attachment появляется такая ошибка:

Fatal error: Cannot redeclare dle_session() (previously declared in /var/www/compik/data/www/site.ru/engine/cache/system/plugins/e46799222ef48974231b79934a44bf1c.php:51) in /var/www/compik/data/www/site.ru/engine/modules/functions.php on line 51

При удалении с кэша e46799222ef48974231b79934a44bf1c.php проблема исчезает, но через некоторое время снова такая же ошибка.

Версия DLE: 14
Подскажите пожалуйста, как можно решить проблему? Заранее спасибо.

P.S. Есть ли какой-то способ в админ-панели найти все новости где прикреплен/указан attachment?

Ответил: LazyDev


Это один из ваших плагинов нарушает работу движка. Ищите проблему в одном из них.

7 комментариев

compik
Юзер

compik - 12 октября 2023 18:25 -

LazyDev, благодарю за ответ.
На сайте включен только ваш плагин DLE Subscribe, и еще DLE PM, DLE комментарии - насколько я понял, это стандартные плагины.

LazyDev
PHP-developer

LazyDev - 12 октября 2023 19:42 -

В DLE нет ни одного предустановленного плагина

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

compik
Юзер

compik - 12 октября 2023 21:33 -

LazyDev, при отключении плагинов, проблема остается.
Как я понимаю из кода ошибки, что-то связанное с сессией пользователя, посмотрел строку 51 в engine/modules/functions.php, там такой код:
function dle_session( $sid = false ) {

LazyDev
PHP-developer

LazyDev - 12 октября 2023 22:00 -

Ошибка указывает что данная функция уже объявлена, где-то какие-то правки вызывают сбой. Возможно вы правили файл engine/download.php

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

compik
Юзер

compik - 15 октября 2023 14:26 -

LazyDev, я проверил, действительно изменен файл engine/download.php.
При клике ведет на "downpage.tpl" и стоит "обратный отсчет" для подготовки ссылки скачивания. Работает по принципу "dude Smart Leech", но по идее НЕ работает. У меня есть оригинал кода, и код с правками, который видимо не совсем совместим с DLE 14.

Вот сами файлы: download.php | download.php [ORIGINAL]

compik
Юзер

compik - 15 октября 2023 15:55 -

Нашел в сети информацию, попробовал переделать download.php, ошибка пропала, но теперь появилась другая проблема - вместо файла attachment скачивает index.htm.

Вот что я менял в download.php:

Найти:
$row = $db->super_query ( "SELECT news_id, name, onserver FROM " . PREFIX . "_files WHERE id ='{$id}'" );

Заменить:
$row = $db->super_query ( "SELECT news_id, name, onserver, author, date, dcount FROM " . PREFIX . "_files WHERE id ='{$id}'" );


Найти:
$row_news = $db->super_query ( "SELECT id, autor, date, category, alt_name, approve, access FROM " . PREFIX . "_post LEFT JOIN " . PREFIX . "_post_extras ON (" . PREFIX . "_post.id=" . PREFIX . "_post_extras.news_id) WHERE id ='{$row['news_id']}'" );

Заменить:
$row_news = $db->super_query ( "SELECT id, autor, date, title, category, alt_name, approve, access FROM " . PREFIX . "_post LEFT JOIN " . PREFIX . "_post_extras ON (" . PREFIX . "_post.id=" . PREFIX . "_post_extras.news_id) WHERE id ='{$row['news_id']}'" );


Найти:
$url = @parse_url ( $row['onserver'] );

Заменить:
$timer = 10;    ////Время, оставшееся до загрузки
$offline_time = 1;    //Время жизни ссылки
//////////////////////////////////////////////////////////////////////////

if( !$_GET['hash'] OR !$_SESSION['download_timer'] OR $_GET['hash'] != md5( $id . $row['onserver'] . $_SESSION['download_timer'] ) OR $_SESSION['download_timer'] > time() OR $_SESSION['download_timer'] + $offline_time*60 < time() )
{
    $_SESSION['download_timer'] = time() + $timer;

    $cat_info = get_vars( "category" );
    if( ! is_array( $cat_info ) ) {
        $cat_info = array ();
        $db->query( "SELECT * FROM " . PREFIX . "_category ORDER BY posi ASC" );
        while ( $row = $db->get_row() ) $cat_info[$row['id']] = array_map("stripslashes",$row);
        set_vars( "category", $cat_info );
        $db->free();
    }
  
    $tpl = file_get_contents( ROOT_DIR . "/templates/{$config['skin']}/downpage.tpl" );

    $tpl = str_ireplace( "{category}", $cat_info[$row_news['category']]['name'], $tpl );
    $tpl = str_ireplace( "{category-link}", $config['http_home_url'] . get_url( intval($row_news['category'] )) . "/", $tpl );
    $tpl = str_ireplace( "{author}", "" . $row['author'] . "", $tpl );
    $tpl = str_ireplace( "{title}", stripslashes( $row_news['title'] ), $tpl );   
    $tpl = str_ireplace( "{full_link}", $full_link, $tpl );  
    $tpl = str_ireplace( "{filename}", stripslashes( $row['name'] ), $tpl );
    $tpl = str_ireplace( "{size}", formatsize( @filesize( ROOT_DIR . '/uploads/files/' . $row['onserver'] ) ), $tpl );
    $tpl = str_ireplace( "{date}", date( "d.m.Y, H:i", $row['date'] ), $tpl );
    $tpl = str_ireplace( "{count}", $row['dcount'], $tpl );
    $tpl = str_ireplace( "{timer}", $timer, $tpl );
    $tpl = str_ireplace( "{downlink}", "index.php?do=download&id=$id&hash=" . md5( $id . $row['onserver'] . $_SESSION['download_timer'] ), $tpl );
    $tpl = str_ireplace( "{charset}", $config['charset'], $tpl );
    $tpl = str_ireplace( "/templates/", $config['http_home_url'] . 'templates/' . $config['skin'], $tpl );
  
    echo $tpl;
    die();
}else $_SESSION['download_timer'] = time();

compik
Юзер

compik - 16 октября 2023 17:49 -

После долгих проб и ошибок, все таки удалось найти рабочее решение и настроить все как мне и нужно было.

Вот готовое решение, возможно кому-то пригодится.

Скачиваете оригинальный файл engine/download.php:
download.php [ORIGINAL] DLE 14

Скачиваете модуль Downpage V1.0 с офф. сайта:
Downpage V1.0

P.S. Проверено на DLE 14, все работает.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх