Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Call to undefined function, хотя include был 
:(
    Опции темы
AzuManga
  Дата 21.8.2007, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 12.5.2005

Репутация: нет
Всего: нет



Здравствуйте, форумчане!

У меня, может и детская проблема от недосыпа, но она есть 8)))

Я делаю скелет сайта на PHP, который выглядит вот так.

Основной файл index.php, в который .htaccess отправляет все запросы:

Код

<?php 
    require_once('classes/BusManager.php');
    intialize();
    
    if(!isset($_GET['first'])){
        include('templates/main.php');
    }
    else if($_GET['first'] == 'cities'){
        echo 'города';
    }
    else if($_GET['first'] == 'companies'){
        echo 'компании';
    }
    else if($_GET['first'] == 'ways'){
        echo 'маршруты';
    }
?>


Для примера разберем первый случай — если не пришло никаких параметров, то юзер зашел на морду страницы и мы ему инклюдим ее шаблон. 

В файле BusManager.php содержатся все вспомогательные функции:
Код

<?php
    
    function intialize(){
            // конструктор
        include('connect.inc');
        $GLOBALS['site'] = $homedir;
        $connection = mysql_connect ($host, $user, $password) or die ('I cannot connect to the database.');
        mysql_selectdb($database);
    }
    
    function gethomedir(){
        return $GLOBALS['site'];
    }
    
    function getheader(){
        include($GLOBALS['site'].'templates/header.php');
    }
    
    function getfooter(){
        include($GLOBALS['site'].'templates/footer.php');
    }
?>


Шаблон морды предельно прост:
Код

<?php 
    getheader();
    getfooter();
?>


Шаблон header.php тоже несложный:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <title>Русавтобус.</title>
    <meta name="description" content="расписание автобусов, автобусы, маршруты автобусов" />
    <link rel="stylesheet" type="text/css" href="<?php gethomedir().'screen.css';?>" media="screen" />
</head>


Суть проблемы в том, что из шаблона header.php не вызывается функция gethomedir(), хотя файл BusManager.php с этой функцией был подключен в самом начале работы. Вместо выполнения этой функции выводится ошибка "Fatal error:  Call to undefined function:  gethomedir() in z:\home\avtobus\www\templates\header.php on line 7"

Подскажите, плиз, куда копать 8)

Это сообщение отредактировал(а) AzuManga - 21.8.2007, 01:21
--------------------
 Точка с запятой; 
PM MAIL   Вверх
Severyanin
Дата 21.8.2007, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



С корее всего, потому, что она вызывается не из тела документа, а из заголовка. Браузер просто не видит этого линка. Попробуйте вытащить ее в body.


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
AzuManga
Дата 21.8.2007, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 12.5.2005

Репутация: нет
Всего: нет



Severyanin, спасибо за ответ, но дело не в этом. Ради надежности даже протестировал и попробовал поместить в body, но толку не было smile 

Я думаю, что тут где-то с последовательностью подключения файлов беда или ...
--------------------
 Точка с запятой; 
PM MAIL   Вверх
Severyanin
Дата 21.8.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



А как определяется $homedir? Я думаю, будет проще использовать getcwd() для определеия местоположения скрипта.


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 21.8.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Проверь на правильность и корректность символов в названии описания функции и ее вызова.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
AzuManga
Дата 21.8.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 12.5.2005

Репутация: нет
Всего: нет



Severyanin, суть в том, что мне еще много функций потом дергать из этого файла.

-=Ustas=-, на уровне корректности символов все ок.

Я вот странное заметил. Если подключить в header.php в самом начале 

Код

<?php require_once('../classes/BusManager.php');?>


То функция уже видна, но глобальная переменная site - не видна и нужно заново дергать функцию initialize() .... Почему же? Если я уже в самом начале подключил этот файл и вызвал эту функцию???
--------------------
 Точка с запятой; 
PM MAIL   Вверх
Severyanin
Дата 21.8.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



А почему нельзя возвращать function gethomedir() просто getcwd()? А подключаться файлы будут также. 
include(getcwd().'templates/header.php'); Или слишком медленно?


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 21.8.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



AzuManga, поставь какой нить константный флаг в файле функций и в хедере его выведи. Мне просто интересно, что у тебя будет в результате.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
sTa1kEr
Дата 21.8.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



AzuManga, можно узнать какая версия PHP и Apache?
PM MAIL   Вверх
AzuManga
Дата 22.8.2007, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 12.5.2005

Репутация: нет
Всего: нет



Проблему решил тем, что подключил файл с фукнциями в файле header.php , спасибо всем, кто отвечал за участие 8)

sTa1kEr, на локалке PHP 4.4.4, Apache 1.3.33 .

-=Ustas=-, если честно, я не знаю как поставить константный флаг в файле функций... Если расскажешь — буду благодарен и потестирую *)
--------------------
 Точка с запятой; 
PM MAIL   Вверх
GiV
Дата 22.8.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 13.7.2006
Где: rus|53

Репутация: 4
Всего: 9



Флаг ставится например так:
Код
define('FLAG_NAME', 1);



Проверка флага в других скриптах, подключающих скрипт с флагом, будет такая

Код
if (defined('FLAG_NAME')) {
    echo 'Flag is set';
}

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1128 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.