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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> require_once в цикле, require_once в цикле не срабатывает 
:(
    Опции темы
flash32
  Дата 20.1.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть код:
Код

$sql="SELECT * FROM `modules` WHERE `active` = '1'";
$result = mysql_query($sql) or die($die_sel . mysql_error());
while ($row = mysql_fetch_array($result)) {
if(file_exists($home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php')) {
    require_once($home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php');
} else {
    $is_close = '1';
    $error = 'невозможно открыть модуль '.$row['name'];
}
}


в таблице 4 строки, значит должно подключаться 4 файла, но при отрабатывании подключается только первый!!! .. если сделать так:
Код

$sql="SELECT * FROM `modules` WHERE `active` = '1'";
$result = mysql_query($sql) or die($die_sel . mysql_error());
while ($row = mysql_fetch_array($result)) {
if(file_exists($home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php')) {
    echo ($home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php');
} else {
    $is_close = '1';
    $error = 'невозможно открыть модуль '.$row['name'];
}
}

то при отрабатывании я вижу 4 полных пути к файлам!!!

если просто писать 4 раза require_once с путями к файлам, то всё прекрасно работает!!!

в чём может быть проблема(`active` везде = 1)???
мож кто знает альтернативные методы подключения???
PM MAIL   Вверх
DikShv
Дата 20.1.2010, 13:31 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Во первых прочти тут
http://php.su/functions/?f=include&choice=info

Ну а во вторых используй проста include
и втретьих конструкции с "_once" обробатываются медленее чем без тут лучше проследить что бы небыло совпадений
PM MAIL   Вверх
Simpliest
Дата 20.1.2010, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(flash32 @  20.1.2010,  12:01 Найти цитируемый пост)
я вижу 4 полных пути к файлам!!!

пути то, ты видишь.
А вот есть ли по этим путям файлы? smile

Код

var_dump(realpath($home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php'));


Добавлено через 2 минуты и 34 секунды
http://simpliest.co.cc/sample/require_once/require.php

http://simpliest.co.cc/sample/require_once/require.phps
http://simpliest.co.cc/sample/require_once/1.phps
http://simpliest.co.cc/sample/require_once/2.phps
http://simpliest.co.cc/sample/require_once/3.phps
http://simpliest.co.cc/sample/require_once/4.phps


--------------------
user posted image
PM   Вверх
flash32
Дата 20.1.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



забыл написать ... с include то же самое  (((
PM MAIL   Вверх
Simpliest
Дата 20.1.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проверь.
http://ua2.php.net/is_readable
возможно просто нет прав на их чтение.


--------------------
user posted image
PM   Вверх
flash32
Дата 20.1.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Simpliest @ 20.1.2010,  13:59)
Проверь.
http://ua2.php.net/is_readable
возможно просто нет прав на их чтение.


при подключении руками всё ок!!!
PM MAIL   Вверх
Simpliest
Дата 20.1.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так не бывает smile
Я пример кода приводил - он работает smile

Файла или нет или он не может быть прочитан.


--------------------
user posted image
PM   Вверх
flash32
Дата 20.1.2010, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Simpliest @ 20.1.2010,  14:08)
Так не бывает smile
Я пример кода приводил - он работает smile

Файла или нет или он не может быть прочитан.

блин, реально оно так!!! ... 
посмотрел то что ты мне писал и изобразил следующее

Код

$files = array();
$sql="SELECT * FROM `modules`";
$result = mysql_query($sql) or die($die_sel . mysql_error());
while ($row = mysql_fetch_array($result)) {
    $files[] = $home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php';
}

foreach ($files as $name) { 
    require_once $name; 
}


вот так всё работает как надо ... 
вот только понять не могу почему в foreach всё работает, а в while - нет .. хотя что тут, что там разбирается массив ..

Добавлено через 3 минуты и 57 секунд
2 Simpliest
СПАСИБО!!! ... помог ... сам бы я начал писать в файл и потом читать из него ... мега-костыль
PM MAIL   Вверх
s0lman
Дата 20.1.2010, 14:28 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


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

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



Может быть, фенкции должен передаваться уже сформированный путь к файлу? smile
типа такого
Код

$fname=$home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php';
require_once($fname);
 


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
DikShv
Дата 20.1.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пробывал убирать скобки?
Вот рабочая версия
Код

<?
$home_dir="D:/Servers/ABOCMS/home/test1.ru/www";
$mod_dir="";
$rows=array(
    array('dir_name'=>'dd','name'=>1),
    array('dir_name'=>'dd','name'=>2),
    array('dir_name'=>'dd','name'=>3),
    array('dir_name'=>'dd','name'=>4),
);
$i=0;
while ($i<count($rows)) {
    $row=$rows[$i];
    if(file_exists($home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php')) {
        include $home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php';
    } else {
        $is_close = '1';
        $error = 'невозможно открыть модуль '.$row['name'];
    }
    ++$i;
}
?>


и не нужно использовать 2 цикла. Это глупо

Это сообщение отредактировал(а) DikShv - 20.1.2010, 14:49
PM MAIL   Вверх
sTa1kEr
Дата 20.1.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



flash32, все что вам было нужно, это:
а) Включить вывод всех ошибок
б) Избавится от дублирования кода
Код

// ...
$file = $home_dir.$mod_dir.'/'.$row['dir_name'].'/'.$row['name'].'.php';
if (file_exists($file)) {
    require_once ($file);
} 
// ...

PM MAIL   Вверх
flash32
Дата 20.1.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



разобрался, всем спасибо за помощь!!!
p.s. даж не ожидал, что так оперативно кто-либо отреагирует!!!)))
PM MAIL   Вверх
nerezus
Дата 20.1.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

Во первых прочти тут
http://php.su/functions/?f=include&choice=info
 Лучше не тут, а в верной и актуальной документации(php.net).

Цитата

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
DikShv
Дата 20.1.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(nerezus @  20.1.2010,  18:52 Найти цитируемый пост)
 Ага, а задницу надо вытирать одним слоем туалетной бумаги, причем площадь кусочка должна равняться площади подушечки пальца. 

Ага, лучше заказать унитаз когда жопа не влезает и уже некуда ее стягивать.

Я не зря так написал из личного опыта знаю когда скрипт криво написанный держал 50 онлай но после такой на первый взгляд нелепой оптимизации его пропус возрос до 100 это хостинге, а на сервере с 500 до 1000

конечно это только 1 пункт из списка нелепых заметок.

PM MAIL   Вверх
nerezus
Дата 20.1.2010, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



DikShv, я привел пример, т.к. твой комент не только не имеет смысла(экономия на спичках), но и реально медленнее:

Твой вариант:
Код

if (!in_array($filename, $GLOBALS['already_required'])) {
    require $filename;
    array_push($GLOBALS['already_required'], $filename);
}


Вариант PHP:
Код

require_once $filename;


А еще я умею пользоваться профайлером, поэтому мой камент про бумагу там и появился(будем считать пока что, что твой вариант мог быть быстрее).
Я сомневаюсь, что заказчик готов платить в 2 раза больше ради прироста производительности 2%.
Ему выгоднее сделать второй проект и получить прирост дохода 100%(считая затраты на раскрутку и т.д. данная цифра будет конечно же меньше)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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