imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 17.11.2006, 11:55     # 1
maskman
Face Of IMHO
 
Аватар для maskman
 
Регистрация: 16.03.2002
Адрес: Moscow
Пол: Male
Сообщения: 4 838

maskman - Гад и сволочь
PHP: проблема c if и include

Здравствуйте
Есть небольшая проблемка, понимание которой вне моей компетенции. Помогите решить.
Есть очень много файлов 'index.php' следущей структуры
Код:
<?php include ('head.php') ?>
<?php include ('body.php') ?>
<?php include ('bottom.php') ?>
'body.php' - в каждом файле разные
'head.php' и 'bottom.php' - для всех файлов одинаковые

Надо сделать чтобы в зависимости от уровня авторизованного пользователя скрывалось/показывалось 'body.php'

Этот вариант работает превосходно и без вопросов
Код:
<?php include ('head.php') ?>

<?php if ($access) { ?>
<?php include ('body.php') ?>
<?php } ?>

<?php include ('bottom.php') ?>
но для его раелизации мне придется изменить больше 1000 файлов 'index.php' - поэтому от отпадает.
или перерыть все 'body.php' - что тоже очень не удобно да и пркатически не возможно.

Если я вставляю начало проверки if ($access) { внутрь 'haed.php', а конец проверки } в начало 'bottom.php', то выскакивает ошибка
Parse error: parse error, unexpected $end in w:\home\webserver\www\lib\head.php on line 181

Помогите решить проблему...
__________________
Улыбайтесь - Это всех раздражает!
Мои фотографии
maskman вне форума  
Старый 17.11.2006, 12:36     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
пропиши в head.php

ob_start();

а в bottom.php

$access ? ob_end_flush() : ob_end_clean();
RaZEr вне форума  
Старый 17.11.2006, 13:19     # 3
Naked
::VIP::
 
Аватар для Naked
 
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194

Naked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked Сэнсэй
RaZEr
наверное вопрос в эту тему.... недавно тоже делал инклуды и столкнулся с похожей проблемой.... а нет ли в пхп какой-нибудь функции которая бы просто инклудила файл (т.е. как в C/C++ - там просто вставляется текст), а то как я понимаю пхп сначала парсит проинклуженные файлы, и соответственно возникают такие проблемы... (у меня случай был с функциями - т.е. две функции объявляются в разных инклудовских файлах и в итоге не видят друг друга... так и не нашел решения...)
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным.
Naked вне форума  
Старый 17.11.2006, 13:32     # 4
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
т.е. две функции объявляются в разных инклудовских файлах и в итоге не видят друг друга
Ни разу не сталкивался с такой проблемой. Может надо просто пересмотреть структуру программы?
RaZEr вне форума  
Старый 17.11.2006, 14:29     # 5
maskman
Face Of IMHO
 
Аватар для maskman
 
Регистрация: 16.03.2002
Адрес: Moscow
Пол: Male
Сообщения: 4 838

maskman - Гад и сволочь
Цитата:
Сообщение от RaZEr
пропиши в head.php
ob_start();
а в bottom.php
$access ? ob_end_flush() : ob_end_clean();
Не свосем понял куда их поместить
вне провеки (до if { и после }) или внутрь?
проверил оба варианта.. оба не хотят работать :-(
__________________
Улыбайтесь - Это всех раздражает!
Мои фотографии
maskman вне форума  
Старый 17.11.2006, 15:01     # 6
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
maskman, я так понимаю, не до или после, а вместо

т.е. логика такова

* ты начинаешь буферизацию последней строкой в head.php: ob_start();
* инклудишь body.php
* первой строкой в bottom.php: $access ? ob_end_flush() : ob_end_clean(); ты либо пишешь буфер в поток, если доступ дан (ob_end_flush), либо просто очищаешь буфер (ob_end_clean) - при этом твой body.php просто игнорируется

условие if в данном случае просто не нужно (его роль играет ?:; оператор)
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 17.11.2006, 15:29     # 7
maskman
Face Of IMHO
 
Аватар для maskman
 
Регистрация: 16.03.2002
Адрес: Moscow
Пол: Male
Сообщения: 4 838

maskman - Гад и сволочь
Всем огромное спасибо..
заработало..
Если позволите в продолжении дискусии и для собственного развития.
Как используя эту конструкцию написать что то наподобии
if () {} else {}
__________________
Улыбайтесь - Это всех раздражает!
Мои фотографии
maskman вне форума  
Старый 17.11.2006, 15:58     # 8
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
я так понимаю, ты хочешь в случае true инклудить один файл body.php, в случае false - другой?

боюсь, решение получается не очень удачное... можно попробовать в bottom.php такой финт:

PHP код:
<?
  
if($access) {
    
ob_end_flush();
  } else {
    
ob_clean(); 
?>
<? 
include ('bodyFALSE.php'?>
<?  
    ob_end_flush
();
  }
?>
проверить на работоспособность не могу (пхп нет под рукой), но общая идея примерно такая...
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  

Опции темы

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

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 23:16.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.