просьба помочь с PHP

12
kamil
На сайте с 16.11.2006
Offline
75
898

Доброго времени суток! Прошу помощи со следующей проблемой - вылезает ошибка при попытке зайти как пользователь

Warning: Cannot modify header information - headers already sent by (output started at /home/domen/public_html/includes/boxes/categories.php:64) in /home/domen/public_html/includes/functions/general.php on line 29

Поискав информацию по теме, понял, что ошибка в файле general.php (строка 29)

<?php

/*
$Id: general.php,v 1.1.1.1 2003/08/27 02:38:56 pngwen Exp $

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

////
// Stop from parsing any further PHP code
function tep_exit() {
tep_session_close();
exit();
}

////
// Redirect to another page or site
function tep_redirect($url) {
if ( (ENABLE_SSL == true) && (getenv('HTTPS') == 'on') ) { // We are loading an SSL page
if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url
$url = HTTPS_SERVER . substr($url, strlen(HTTP_SERVER)); // Change it to SSL
}
}

header('Location: ' . $url); // ВОТ СТРОКА 29!!!

tep_exit();
}

Насколько я понял, проблема в том, что браузеру передается какая-то информация на вывод ДО заголовка. То есть перед header. Я в PHP понимаю мало, просьба помочь разобраться.

P.S. Перед <?php нет, ни тэгов, ни пробелов.

edogs software
На сайте с 15.12.2005
Offline
775
#1

general.php у Вас наверняка вызывается из какого-то другого скрипта. Вот где-то там раньше вывод и был сделан.

Проще всего в самом начале скрипта который вызывается по url-у, поставить

ob_start();

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
P
На сайте с 02.03.2005
Offline
46
#2
kamil:
output started at /home/domen/public_html/includes/boxes/categories.php:64

Перевести или сам поймеш в каком файле и в какой строчке была начата передача данных в браузер?

kamil
На сайте с 16.11.2006
Offline
75
#3

спасибо, пойму)

kamil
На сайте с 16.11.2006
Offline
75
#4

edogs, phprus, спасибо за помощь!

kamil
На сайте с 16.11.2006
Offline
75
#5

Чтобы не создавать новую тему, отпостил сюда же. Такая проблема - установил oscommerce. При попытке установить что-нибудь поверх(FAQ, к примеру) вылезает одна и та же ошибка Fatal error: Cannot redeclare tep_show_category() (previously declared in ...public_html/includes/boxes/categories.php:13) in ...public_html/includes/boxes/categories.php on line 13.

Не знаю уж, что и делать.😒

Dreammaker
На сайте с 20.04.2006
Offline
570
#6

Это значит, что объявление функции tep_show_category() идёт дважды (или трижды.. :) ) Скорее всего в основном коде и в модуле который ставится поверх. Как вариант, помле установки удалить эту функцию из этого файла categories.php

не самый лучший вариант, но возможно поможет :) Хотя есть вариант, что работать не так будет как нужно...

kamil
На сайте с 16.11.2006
Offline
75
#7

А почему в ошибке написано, что функция объявляется из одного и того же места тогда?😕

D
На сайте с 21.06.2006
Offline
168
#8

Скорее всего файл с функцией инклудится обычным include.

Надо заменить на include_once

Appstorespy - платформа анализа мобильных сторов | Publa.io - готовая инфраструктура для приема платежей и оплаты рекламных кабинетов в бурже
kamil
На сайте с 16.11.2006
Offline
75
#9

Про это слышал, но все равно спасибо. Найти бы, где инклюдиться.

edogs software
На сайте с 15.12.2005
Offline
775
#10
kamil:
Про это слышал, но все равно спасибо. Найти бы, где инклюдиться.

Можно проще, инклудится как мы поняли categories.php ? Если php не 5-ка, то можно в начале инклудящегося файла поставить.

if(defined("ABAZABA")) return;

define("ABAZABA",1);

Смысл в чем - по второму разу у Вас этот файл не сработает, так как константа уже будет определена.

К сожалению, если не ошибаемся, в php5 такой трюк не прокатит, ибо при инклуде выпарсиваются все функции по любому.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий