Wczoraj nieoczekiwanie mój skrypt blogowy czyli WordPress 3.0 zaliczył poważną wpadkę, która skończyła się wyświetleniem informacji o błędzie i kompletną niedostępnością bloga (również od strony panelu administracyjnego). Dodam jedynie, że oprócz aktualizacji którą robiłem kilka dni temu nie zmieniałem nic ani w konfiguracji WP ani też w żadnym jego pliku.

Błąd jaki miałem przyjemność oglądać przez kilka godzin będąc zupełnie bezradnym (akurat jestem na wyjeździe i nie mam ze sobą laptopa z wszystkimi ustawieniami, FTP itp) był opisany w taki sposób:

Fatal error: Cannot redeclare get_the_attachment_link() (previously declared in /home/virtual/antyweb2/www/wp-includes/post-template.php:974) in /home/virtual/antyweb2/www/wp-includes/deprecated.php on line 1907

Nie jestem programistą ale z tego co rozumiem jest to konflikt funkcji. Najgorsze jest jednak to, że błąd ten wystąpił nagle i dotyczy dwóch oryginalnych plików wordpressa, które jak już wspomniałem nie były przeze mnie modyfikowane.

Sytuację uratowała moja firma hostingowa czyli Hostersi.pl. Admini szybko zajęli się moim zgłoszeniem i mimo iż była to ewidentnie wina skryptu (i godziny wieczorne) a nie infrastruktury to zajęli się tą sprawą i sami z własnej inicjatywy rozwiązali problem poprzez przywrócenie kopii skryptu z nocy. Polecam tę firmę każdemu kto szuka hostingu z dobrym wsparciem!.

Problem z blogiem po interwencji hostersów został rozwiązany natomiast nadal nie poznałem przyczyny błędu i szczerze mówiąc to mnie trochę niepokoi. Pierwsze skojarzenie to oczywiście upgrade do wersji 3.0 tylko dlaczego błąd nie wystąpił natychmiast ale po kilku dniach?

Jeśli ktoś mógłby mi pomóc w znalezieniu przyczyny tego błędu będę bardzo wdzięczny.

Spodobał Ci się tekst? Poleć znajomym:

iStore

iStore

  • http://www.nethut.pl/ Michał Paluchowski

    Patrząc na nazwę drugiego pliku (deprecated.php) wygląda na to, że wspomniana funkcja ma zostać usunięta w ogóle z WordPressa, a chwilowo dla zachowania zgodności ze starszymi rozszerzeniami, została pozostawiona.

    Obstawiam, że w trakcje aktualizacji pierwszy z wymienionych plików nie został odpowiednio nadpisany.

  • http://www.muzungu.pl konradk

    widzialem wczoraj ten blad u Ciebie :) funkcja get_the_attachment_link() zostala w wp 3.0 przeniesiona z pliku post-template.php do deprecateed.php. skrypt instalacyjny nadpisal plik deprecated.php nowym, ale nie nadpisal post-template.php.

    tak sie dzieje, gdy podczas instalacji aktualizacji na serwerze skonczy sie ram na przyklad lub czas wykonywania skryptu. zatem nie jestem pewien czy na pewno nie jest to wina hostingu (zalezy ile ci zasobow przydzielili).

    juz pomijajac fakt, ze aktualizowanie strony w czasie wyjazdu to lekki hardcore ;)

  • James

    „Nie jestem jest programistą”
    Chyba jedno „jest” za dużo :)

  • http://antyweb.pl Grzegorz Marczak

    @Michał – dzięki za sugestie to faktycznie może być przyczyna – aktualizowałem WP przez padne administratora i może coś poszło nie do końca dobrze.

    @konradk – dzięki za sugestie, co do aktualizacji to robiłem ją przed wyjazdem i nie było tego błędu.

  • http://www.facebook.com/tomasz.pietrowski Tomasz Pietrowski

    aktualizowalem wczoraj blogplay.pl. O dziwno nie bylo zadnego problemu :)

  • http://blog.prosens.pl/ Prosens

    „Nie jestem jest programistą ale z tego co rozumiem jest to konflikt funkcji.” popraw ;)

    mi niestety również pojawił się problem po przejściu do 3.0 – dwie wtyczki zwariowały przez co strona nie działała poprawnie – z braku aktualnych wersji wtyczek pod 3 musiałem powrócić do poprzedniej wersji…

  • Green

    Prosens: Nie jestem programistą ale z tego co rozumiem jest to konflikt funkcji.

    To ja jako programista zapytam co rozumiesz pod pojęciem „konflikt funkcji” :)

    • http://www.facebook.com/profile.php?id=100000120120681 Łukasz Kurowski

      Konflikt funkcji ? Ja bym zrozumiał to tak, że ktoś próbuje nadpisać funkcję która już istnieje. Programisto.

  • http://www.facebook.com/profile.php?id=100000746837233 Michał Archacki

    Z doswiadczenia wiem ze przy aktualizacji WP to sie wali to wlasnie pluginy, standardowa sprawa.

  • http://iblog.pl/2010/06/23/predators-oficjalny-trailer-wydany/ Saint

    Problem polega na tym, że nie zrobiłeś podstawowej rzeczy, którą się robi przed aktualizacją tj. wyłączenie wszystkich plug0-in’ów, a potem kolejno ich włączanie do daje Ci to że wiesz, który plug-in powoduje ci błąd.

  • http://www.facebook.com/bartosz.hernas Bartosz Hernas

    Miałem podobny bład (inna funkcja). Odkryłem że jest to pośrednio wina serwerów. Po prostu plik w którym jest ta funkcja jest includowany za pomocą „include”. Po zmianie na „include_once” wszystko wraca do normy.

  • krzyszko

    Jako programista napiszę w czym problem.

    Otóż funkcja ‘get_the_attachment_link()’ została najpierw zadeklarowana w załadowanym pliku post-template.php (w linijce :974) a później został załadowany plik deprecated.php, który też posiadał deklarację tej funkcji w linijce :1907.

    Język PHP(i każdy inny) nie zezwala na zadeklarowaniu dwóch takich samych funkcji(metod).
    Taki błąd jest typu fatal w wyniku czego następuję przerwanie wykonania skryptu i wyrzyceniem odpowiedniego błędu.

  • http://www.facebook.com/piotr.pelczar Piotr Pelczar

    Wystarczyłoby, gdybyś objął funkcję w pliku deprecated.php w klamrę a nad nią dopisał: if(!function_exists(‘get_the_attachment_link’)) – to tak na przyszłość.

    • http://www.muzungu.pl konradk

      wystarczyloby przeslac jeszcze raz plik post-template.php, bo wlasnie na jego nie przeslaniu polegal blad :) edytowanie czegokolwiek w core wordpressa to sredni pomysl

  • zan

    Doceniam uczynność hostingu, ale mam pytanie. Czy oni nie wiedzieli komu naprawiają serwis? Wierzyć mi się nie chce, że w podobny sposób będą reagować gdy się komuś posypie blog z 10 wizytami dziennie i ani pochwała ani nagana nie zatoczy większych kręgów. Nie bądźmy naiwni.

  • zan

    Kwestie programistyczne.

    Piotr Pelczar. Pomijając uwagę konradk, mam uwagę ogólną dla początkujących programistów. NIGDY nie naprawiajacie w ten sposób błędów. Jeśli np. w pętli wyjdziecie poza zakres, to przeanalizujcie działanie petli zamiast sztukować IFami. Generalnie: poprawiać zrozumiejąc w czym tkwi błąd, a nie łatać po omacku.

    A co do błedu na stronie Antyweba. Błąd błedem, ale jego obsługa, tzn. publiczne wywalenie komunikatu PHP to też zła praktyka. Świadczy o niebezpiecznej konfiguracji PHP (w produkcyjnym środowisku nie pokazujemy takich tekstów), unikaniu obsługi wyjatków w kodzie WordPressa (błędy można przechwycić – choć kostropatość PHP czasami utrudnia to zadanie).

  • http://www.fungusto.pl Fungusto

    Widzę że drogi hosting masz :)