Tworzę wtyczki WordPress. Po aktywacji wtyczki pojawia się następujący komunikat:
Wtyczka wygenerowała 293 znaki nieoczekiwanego wyjścia podczas aktywacji. Jeśli zauważysz komunikaty „nagłówki już wysłane”, problemy z kanałami syndykacyjnymi lub inne problemy, spróbuj dezaktywować lub usunąć tę wtyczkę.
Wtyczka działa bardzo dobrze, ale nie wiem, dlaczego otrzymuję ten komunikat. Moja wtyczka to: http://wordpress.org/extend/plugins/facebook-send-like-button/
activate_plugin method
wwordpress/wp-admin/includes/plugin.php
. Zawartość zmiennej wyjściowej $ pokaże dane załadowane do wyjątku niezmiennie rzucane, a następnie zaciemniane przez wordpress.Odpowiedzi:
Domyślam się, że pojawia się błąd PHP, który generuje dane wyjściowe przed wysłaniem nagłówków. Jeśli
E_NOTICE
włączyłeś, wywołanie$_POST['foo']
może wygenerować błąd „Uwaga: zmienna niezdefiniowana”, jeśli ta zmienna nie jest ustawiona.Najlepsza praktyka: nigdy nie zakładaj niczego o zmiennych GET, POST, COOKIE i REQUEST. Zawsze sprawdź najpierw za pomocą
isset()
lubempty()
.źródło
Jest to zwykle spowodowane spacjami lub nowymi liniami przed
<?php
tagiem otwierającym lub za?>
tagiem zamykającym .Sprawdź tę stronę, aby zobaczyć niektóre rozwiązania: Jak rozwiązać problem z ostrzeżeniami, które już wysłano?
AKTUALIZACJA
Po sprawdzeniu kodu wtyczki zauważyłem, że nie masz zamykającego znacznika PHP. W ostatnim wierszu dodaj
?>
źródło
?>
tagu zamykającego . W rzeczywistości jednym ze sposobów zagwarantowania, że nie spowodujeHeaders already sent
to problemów, jest pozostawienie tagu zamykającego.?>
.Na początku swojej funkcji aktywacji umieść a,
ob_start();
a na końcu umieść atrigger_error(ob_get_contents(),E_USER_ERROR);
Następnie spróbuj aktywować wtyczkę, a zobaczysz, czym tak naprawdę są „ wygenerowane 293 znaki nieoczekiwanego wyjścia ”. Od tego momentu debugowanie będzie łatwiejsze (usuń znaki nowej linii lub usuń niektóre błędy).
źródło
Wcześniej miałem ten sam problem, dla mnie była to dodatkowa biała przestrzeń. Po usunięciu wszystkich białych znaków wtyczka mogła się aktywować bez żadnego błędu / ostrzeżenia.
źródło
Nie jestem pewien, czy to jest problem, ale jestem tego całkiem pewien.
Musisz użyć poprawnego wywołania zwrotnego jako drugiego argumentu w
register_activation_hook()
:O ile wiem,
twl_tablo_olustur()
nigdzie nie zdefiniowałeś . To z pewnością wyjaśniłoby nieoczekiwane wyjście (błąd PHP wygenerowany podczas próby wywołania nieistniejącej funkcji) i wyjaśniłoby, dlaczego działa dobrze we wszystkich innych okolicznościach.źródło
register_activation_hook(__FILE__,'twl_tablo_olustur');
ten kod ze starej wersji. W nowej wersji (można sprawdzić, wersja 1.3) jest zaktualizowany, ale nadal występuje ten sam błąd.Często otrzymuję te wiadomości, gdy wysyłam komunikaty debugowania wtyczek / motywów, szczególnie gdy wysyłam rzeczy przed wywołaniem wp_header.
Jeśli wypisujesz jakieś znaki, to uważam (może być tutaj źle), że istnieje niejawna deklaracja nagłówka, więc gdy wystąpi normalne wywołanie header (), pojawia się błąd, ponieważ nie możesz mieć 2 deklaracji nagłówka.
Możesz użyć ob_start () do buforowania danych wyjściowych, co powinno usunąć błąd - spójrz na komentarze tutaj: http://php.net/manual/en/function.header.php
źródło
Wiem, że to stare pytanie i ma akceptowaną odpowiedź. Istnieje wiele odpowiedzi obejmujących problem z aktywacją mogłaby być potencjalnie. Jednak żadna z odpowiedzi tak naprawdę nie dotyczy sedna wydania HOW jak debugować problemy z aktywacją wtyczki.
Jeśli zamierzasz opracować wtyczki WP, równie dobrze możesz użyć odpowiednich narzędzi do tego zadania. Jednym z nich jest pasek debugowania . To jest wtyczka, która pomaga debugować problemy w WP. Jeśli jesteś programistą wtyczek, powinien on znajdować się w twoim zestawie narzędzi.
Pasek debugowania ma wiele dodatków - wtyczek do wtyczki, jeśli chcesz. Jednym z nich jest Aktywacja wtyczki Debug Bar , która pokaże błąd PHP generowany podczas aktywacji wtyczki. Gdy wiesz, co to jest błąd PHP, który powoduje wysłanie nagłówków, wiesz, gdzie trzeba go naprawić. Zaufaj mi, wiedząc, jaki jest błąd, możesz zaoszczędzić mnóstwo czasu, zamiast próbować dowiedzieć się, jaki może być błąd .
źródło
Patrząc na ostatnią wersję wtyczki (381724) problemem jest zbyt wiele spacji
za każdym razem, gdy chcesz utworzyć tę strukturę:
w kodzie użyj TAB, a nie spacji.
Oto kod, w którym zastąpiłem wszystkie spacje tabulatorami i nie otrzymuję żadnych wiadomości przy aktywacji:
źródło
function blabla(){?> <input> <?php code... ?> output something <?php code.. }
to nie jest tak.?>
, otrzymasz,header already send error
ponieważ te dodatkowe białe spacje zostaną wydrukowane, gdy silnik php parsuje je.Usuwasz php close tag (?>) Na końcu każdego pliku. a także usuń całe puste miejsce po tagu php close (?>)
po aktywowaniu wtyczki sprawdź, czy tabela już istnieje, czy nie.
usunąłem problem przez kod
źródło
Mój problem polegał na tym, że plik został zapisany jako plik UTF-8. Zapisanie go za pomocą strony kodowej 1252 rozwiązało błąd.
źródło