Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: require_once + Header
 
 автор: Resurepus   (21.05.2008 в 04:37)   письмо автору
 
 

Доброго времени суток. У меня сложилась вот такая ситуация.
Есть определенная функция abc(), для удобства и масштабируемости она была вынесена в отдельный 1.php файл. В этом файле только одна эта функция. Ну например так:
<?php
  
function abc($a$b$c$d$e
  { 
  
бла-бла-бла
  
return true;          
  }
?>

И есть основной файл main.php:
<?php
  
// Подключаем функцию abc
  //require_once "../1.php";
  
бла-бла-бла
  
if (что-то) {
    
Header("Location: index.php");
    exit();
    }
  
бла-бла-бла
?>

Только вот в чем загвоздка: если файл 1.php подключать как в примере, то браузер показывает чистый лист. Я так понял что это после Header("Location: index.php"). А если функцию abc() описать в самом файле main.php (а не подключать), то все работает нормально и корректно.
В чем может быть проблема? Оч. надеюсь на скорейшую помощь.

   
 
 автор: sim5   (21.05.2008 в 04:48)   письмо автору
 
   для: Resurepus   (21.05.2008 в 04:37)
 

А что вы ожидали увидеть, если обращения к своей функции вы не далаете? И зачем нужен exit() после хидера?

   
 
 автор: SiM(R)   (21.05.2008 в 06:02)   письмо автору
 
   для: sim5   (21.05.2008 в 04:48)
 

require_once "../1.php"

Судя по ссылки, Ваш файл с функцией находится на уровень выше относительно файла использующей данную функцию. Это действительно так?

если нет, то разместите файл 1.php в туже папку, где находится файл с обращением к этой функции и измените путь в:
require_once "1.php"

   
 
 автор: Resurepus   (21.05.2008 в 13:59)   письмо автору
 
   для: sim5   (21.05.2008 в 04:48)
 

Вызов функции присудствует, да и какая разница, вызывается она или нет?
Принудительно завершаю сценарий. Нет смысла его дальше продолжать.
А есть разница где лежит прикрепляемый файл? Я думаю это не критично, поскольку все пути все равно относительно main.php

   
 
 автор: sim5   (21.05.2008 в 14:17)   письмо автору
 
   для: Resurepus   (21.05.2008 в 13:59)
 

Ну ничего какая разница, в вашем примере только и стоит догадываться что такое "бла-бла-бла", и что за "что-то". Если есть вывод в браузер, значит что-то вы увидите. А проку от exit никакого, так как хидер перенаправляет на другую страницу.

   
 
 автор: Resurepus   (21.05.2008 в 15:05)   письмо автору
 
   для: sim5   (21.05.2008 в 14:17)
 

"бла-бла-бла" и "кое-что" думаю тут не играет большой роли. Поскольку загвоздка в том что если 1.php прикрепляется через require_once "../1.php" то ошибка присутствует, а если функция описана в самом main.php, то все работает. Вот в чем проблема, я не понимаю где тут разница?

   
 
 автор: sim5   (21.05.2008 в 15:17)   письмо автору
 
   для: Resurepus   (21.05.2008 в 15:05)
 

1.php

<?php 
function abc() {  
  return 
"Привет";           

?>

Вызов:

<?
require_once "1.php";
echo 
abc();
?>

Пробуйте, все будет работать (только подключение не с выше уровня, а от корня у меня).

   
 
 автор: Resurepus   (21.05.2008 в 16:11)   письмо автору
 
   для: sim5   (21.05.2008 в 15:17)
 

Перемещение файла не помогло =(

   
 
 автор: sim5   (21.05.2008 в 16:22)   письмо автору
 
   для: Resurepus   (21.05.2008 в 16:11)
 

Я вам и не говорю, что ошибка в путях, если бы так, то вы бы получили сообщение об ошибке. Приведите код: как вы используете эту функцию на странице и т.д., без всяких "бла-бла-бла". Чудес не бывает, значит у вас ошибка есть.

   
 
 автор: Resurepus   (22.05.2008 в 13:13)   письмо автору
 
   для: sim5   (21.05.2008 в 16:22)
 

Да же вам пишу где вся соль проблемы. Функция в этом файле - работает, подключена из внешнего - не работает. Причем тут бла-бла-бла?
Ну короче проблема была найдена и решена. Все из-за BOM-метки в начале файла (аккуратней с юникодом!!!).
Всем спасибо за советы и предложенные решения. Тему можно закрывать.

   
 
 автор: Valick   (21.05.2008 в 17:01)   письмо автору
 
   для: Resurepus   (21.05.2008 в 16:11)
 

Скорее всего у вас в файле с функцией есть пробелы (а это уже вывод в браузер, чего нельзя делать до отправки заголовка) либо до "<?php" либо после "?>"
даже перевод строки уберите после "?>"

   
 
 автор: sim5   (21.05.2008 в 17:12)   письмо автору
 
   для: Valick   (21.05.2008 в 17:01)
 

При чем тут заголовки? Во-первых было сообщение об ошибке, во-вторых заголовок передается, если верить автору, после некого "бла-бла-бла"... в общем не ясно.

   
 
 автор: Valick   (21.05.2008 в 17:34)   письмо автору
 
   для: sim5   (21.05.2008 в 17:12)
 

Во-первых было сообщение
Где? Я так понял вывод ошибок отключен, поэтому и "чистый лист".

   
 
 автор: sim5   (21.05.2008 в 17:38)   письмо автору
 
   для: Valick   (21.05.2008 в 17:34)
 

Если автор под выводом подразумевает этот бла-бла, то ошибка будет после вывода. Я уже задавал вопрос о вызове функции, пока знаем, что "это не важно" (авторска ремарка). Помоему автору это не стольк и нужно, иначе бы уже знали...

   
 
 автор: Valick   (21.05.2008 в 17:43)   письмо автору
 
   для: sim5   (21.05.2008 в 17:38)
 

Это действительно неважно. Обратите внимание на это: "если функция в одном файле с Хедером, то всё работает, а если функцию подключить из файла, то ошибка"

   
 
 автор: sim5   (21.05.2008 в 17:59)   письмо автору
 
   для: Valick   (21.05.2008 в 17:43)
 

И что? Ее можно и в начале файла подключить... Меня это не так волнует, если функция не реализовывает вывода в браузер, и выполняется условие, то а дальше... короче, я гадать не намерен, не мне же это нужно.)

   
 
 автор: root   (21.05.2008 в 20:04)   письмо автору
 
   для: sim5   (21.05.2008 в 14:17)
 

> А проку от exit никакого, так как хидер перенаправляет на другую страницу.
Да, перенаправляет, но скрипт не останавливает... а если вместо "бла-бла-бла" стоит mail()...

   
 
 автор: sim5   (21.05.2008 в 20:16)   письмо автору
 
   для: root   (21.05.2008 в 20:04)
 


<?
header
('location: as.php');
echo 
"AS";
?>

Если у вас после хидера будет вывод в браузер, я соглашусь с вами.

   
 
 автор: Root   (21.05.2008 в 20:18)   письмо автору
 
   для: sim5   (21.05.2008 в 20:16)
 

:-) вывод это другое... а вы попробуйте с mail()..

   
 
 автор: sim5   (21.05.2008 в 20:20)   письмо автору
 
   для: Root   (21.05.2008 в 20:18)
 

А чем echo от mail в данном случае отличается?
PS. Да, mail проходит, даже не знал. Что тогда получается, что еще будет после перенаправления (фактически мы ведь "уходим") работать?

   
 
 автор: Root   (21.05.2008 в 20:25)   письмо автору
 
   для: sim5   (21.05.2008 в 20:20)
 

из мануала

<?php
header
("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

без exit; code below соответственно gets executed

   
 
 автор: sim5   (21.05.2008 в 20:32)   письмо автору
 
   для: Root   (21.05.2008 в 20:25)
 

Я просто ни когда не пишу лишнего после перехода, да и не логично чего-то там писать. В моем ("настольном") мануале exit даже и не упоминается, а на ru2.php.net по этому вопросу даже и не смотрел. Надо учесть это.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования