За последние 24 часа нас посетили 16837 программистов и 1253 робота. Сейчас ищут 1425 программистов ...

ошибки Cannot redeclare после переноса сайта

Тема в разделе "PHP для новичков", создана пользователем hank, 17 окт 2011.

  1. hank

    hank Активный пользователь

    С нами с:
    16 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Белгород
    Добрый день, уважаемые!
    Перенесен сайт с одного хостинга на другой.
    Сайт использует админку siteperfect. Создан неизвестными людьми.
    После переноса сайт работает, но в админку не пускает. После ввода логина - пароля открывается окно админки, но с ошибками.
    Код (Text):
    1.  
    2. Fatal error: Cannot redeclare getmodules() (previously declared in /home/имя пользователя/public_html/admin/function.php:12) in /home/имя пользователя/public_html/admin/function.php on line 54
    Я совершенно не понимаю как лечить.
    Судя по всему, надо обновлять сам код.
    На сервере используется PHP Version 5.2.17
    eAccelerator v0.9.6.1
    ionCube PHP Loader v4.0.9
    Zend Optimizer v3.3.9
    Suhosin v0.9.32.1


    Вот код function.php

    PHP:
    1.  
    2. <?php
    3. //подключение модулей
    4. $modules = GetModules();
    5. for( $i=0; $i<count($modules); $i++ )
    6.         {
    7.         include('modules/'.$modules[$i][name].'/function.php');
    8.         }
    9. function GetModules()
    10.         {
    11.         $dir = GetRootPath()."/admin/modules/";
    12.         if (is_dir($dir))
    13.         {
    14.         if ($dh = opendir($dir))
    15.                 {
    16.                 while (($file = readdir($dh)) !== false)
    17.                         {
    18.                         if( $file!='.' && $file!='..' && is_dir($dir.$file) )
    19.                                 {
    20.                                 if(     is_file( $dir.$file."/module.php" ) &&
    21.                                         is_file( $dir.$file."/config.php" ) &&
    22.                                         is_file( $dir.$file."/function.php" ) &&
    23.                                         is_file( $dir.$file."/list.php" ) &&
    24.                                         is_file( $dir.$file."/edit.php" ) )
    25.                                         {
    26.                                         include ( 'modules/'.$file.'/config.php' );
    27.                                         $last = count($ret);
    28.                                         $ret[$last] = $mod;
    29.                                         unset($mod);
    30.                                         $ret[$last][name] = $file;
    31.                                         }
    32.                                 }
    33.                         }
    34.  
    35.                 closedir($dh);
    36.                 }
    37.         }
    38. ?>
    39.  
    12 строка в ошибке соответствует 8 в листинге.
    Предыдущую аналогичную ошибку решил, или избавился от нее добавив
    перед функцией

    PHP:
    1. if(!function_exists('sd')) {
    Пожалуйста, выручите.
     
  2. hank

    hank Активный пользователь

    С нами с:
    16 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Белгород
    Код (Text):
    1. Warning: require_once(modules//list.php) [function.require-once]: failed to open stream: No such file or directory in /home/rstud471/public_html/admin/list.php on line 11
    2.  
    3. Fatal error: require_once() [function.require]: Failed opening required 'modules//list.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/rstud471/public_html/admin/list.php on line 11
    Ругается на ошибку.
    Листинг http://pastebin.com/mCNkaDhT
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    hank
    написано, что в 54, а не в 12 идет вторичное объявление функции.

    ваще, я б пораскинул мозгами, нафига оно надо в одном файле дважды-то, но на вашем месте стоит найти в себе силы, взять чутка бюджета и заказать комунить все то же самое на стандартном шасси типа друпала, ждумлы, модыкса и т.п.

    Что у вас там за сайт? =) Чего б его не перенести на человеческий движок?
     
  4. hank

    hank Активный пользователь

    С нами с:
    16 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Белгород
    Да я бы перенес, но мастера джедая не хватает.
    PHP:
    1.  
    2. <?
    3. define ( CURRENT_MODULE, $module );
    4. require('mysqlconnect.php');
    5. require('auth.php');
    6. require('function.php');
    7.  
    8. if ( !$action ) $action = 'list';
    9.  
    10. //include_once('modules/'.CURRENT_MODULE.'/list.php');
    11.  
    12. ?>
    13. <html>
    14. <head>
    15. <meta http-equiv='Content-Language' content='ru'>
    16. <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
    17.   <link rel='stylesheet' type='text/css' href='style.css'>
    18. <script type="text/javascript" src="common.js">
    19. //</script>
    20. <script type="text/javascript" src="script.js">
    21. //</script>
    22. <title>Административная часть - управление сайтом</title>
    23. </head>
    24. <body onload="parent.document.getElementById('myFr').style.height=document.body.scrollHeight;">
    25. <h1><?=CURRENT_MODULE?></h1>
    26. <?=$content?>
    27. </body>
    28. </html>
    29.  
    В этом коде закомментил 10 строку. Теперь ни на что не ругается, но вывод - никакой. Только шаблон админки, без всяческих там модулей.
     
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Ну так ведь не указано, какой модуль нужно подгружать. $Module не определен.
    В начале скрипта (в самом начале) сделайте
    PHP:
    1.  
    2. <?php
    3. ini_set ('display_errors', 1);
    4. error_reporting (E_ALL | E_STRICT);
    5.  
    Это просто чтобы видеть полностью и целиком сообщения об ошибках.
     
  6. hank

    hank Активный пользователь

    С нами с:
    16 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Белгород
    Текст ошибки:

    Strict Standards: main() [function.main]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set()

    Спасибо, что подсказали. Сейчас вот такая ошибка. Видимо вызов часового пояса. И поэтому ошибка, конфликт с сервером какой-то. Сейчас буду гуглить.
     
  7. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    hank
    date_default_timezone_set ('Europe/Moscow');
     
  8. hank

    hank Активный пользователь

    С нами с:
    16 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Белгород
    PHP:
    1. <?
    2. ini_set ('display_errors', 1);
    3. error_reporting (E_ALL | E_STRICT);
    4.  
    5. require('mysqlconnect.php');
    6. require('auth.php');
    7. require('function.php');
    8. define ( CURRENT_MODULE, $module );
    9. //require('mysqlconnect.php');
    10. //require('auth.php');
    11. //require('function.php');
    12.  
    13. if ( !$action ) $action = 'list';
    14.  
    15. require('modules/'.CURRENT_MODULE.'/list.php');
    16. date_default_timezone_set ('Europe/Moscow');
    17. ?>
    18. <html>
    19. <head>
    20. <meta http-equiv='Content-Language' content='ru'>
    21. <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
    22.   <link rel='stylesheet' type='text/css' href='style.css'>
    23. <script type="text/javascript" src="common.js">
    24. //</script>
    25. <script type="text/javascript" src="script.js">
    26. //</script>
    27. <title>Административная часть - управление сайтом</title>
    28. </head>
    29. <body onload="parent.document.getElementById('myFr').style.height=document.body.scrollHeight;">
    30. <h1><?=CURRENT_MODULE?></h1>
    31. <?=$content?>
    32. </body>
    33. </html>

    Код (Text):
    1. PHP Fatal error:  require() [<a href='function.require'>function.require</a>]: Failed opening required 'modules//list.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/rstud471/public_html/admin/list.php on line 16
    Другой вопрос. почему же на прежнем хостинге ошибок не было...?
     
  9. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    hank
    Объясняю ещё раз — у вас не определена переменная $Module. Т.е она пустая. Из-за этого пытается подгрузиться несуществующий файл по несуществующему пути. Возможно в предыдущем хостинге был включен register_globals. У вас в строке браузера есть что-то вроде
    Если да, замените
    PHP:
    1.  
    2. <?php
    3. define ('CURRENT_MODULE', $module );
    4.  
    на
    PHP:
    1.  
    2. <?php
    3. define ('CURRENT_MODULE', $_GET['module']);
    4.  
     
  10. hank

    hank Активный пользователь

    С нами с:
    16 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Белгород
    долго писал пост, но закончилась ссессия, а текст не вернешь!
    Так вот, спасибо большое! Это помогло.
    Но всплыли еще сотни ошибок примерно следующего вида "Use of undefined constant" - и так много-много раз на разные константы и файлы модулей.
    Это раз.
    Undefined variable - это два.

    Если подскажете стратегию лечения, возможно я приведу код в порядок.
    А вот register_globals = On скорее всего не дадут сделать, по крайней мере .htaccess не помогает, вылазит ошибка 500.
     
  11. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    На самом деле так не совсем правильно. Я просто привел пример.
    Правильнее будет так:

    $Module = isset ($_GET['module']) ? trim (strip_tags ($_GET['module'])) : 'имя_модуля_по_умолчанию';
    define ('CURRENT_MODULE', $Module);

    Если дадите точные тексты ошибок, возможно дам ещё какие-то решения. Но этого должно хватить, по идее.

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