Zend Optimizer - Fatal error: Incompatible file format

Po aktualizacji Zend Guarda do nowszej wersji np. 5.0.1 i po przekompilowaniu projektu może pojawić się błąd o następującej treści:

Error: Fatal error: Incompatible file format: The encoded file has format major ID 3, whereas the Optimizer expects 2 in [nazwa_pliku] on line 0

Jednak nie każdy problem taki straszny na jakiego wygląda…

Wystarczy zaktualizować ZendOptimizer’a do wersji 3.3 i Zend Engine do wersji 2.2 i będzie po kłopocie.
Funkcja phpinfo() pomoże sprawdzić załadowaną wersję Zend Optimizer’a.

Skąd ściągnąć aktualizacje powyższych?
Sprawdź w Google.
Powodzenia.

Jak oswoić ZendOptimizer i ionCube?

Miałem wczoraj możliwość ustawienia ciekawego rozwiązania hashowania skryptów PHP - ionCube oraz ZendOptimizer .
Istotą sprawy było to, że wszystko miałem zainstalowane i dobrze ustawione w pliku php.ini z taką małą różnicą, że phpinfo(); jednak nie pokazywało odpowiednich informacji o tych ustawieniach, co - de facto - również nie działało.

Cóż więc jest nie tak?

Przejrzałem google w wzdłuż i wszerz i niestety nie znalazłem odpowiedzi na to pytanie. Znalazłem natomiast mnóstwo opisów dotyczących prawidłowej konfiguracji tzw. loaderów w pliku ustawień samego deskryptora PHP.

Przejrzałem jeszcze raz konfiguracje i manuale. Okazało się, że PHP nie może być skompilowane z opcją

-enable-debug

wpp. loadery nie ładują się.

Wobec tego ponownie skompilowałem PHP 5.2.0 na freeBSD 6.1 przy czym tym razem nie zaznaczałem opcji debug. Oczywiście należało również pwtórnie skompilować wszystkie używane moduły, gdyż te wcześniejsze były jakby przygotowane dla wspomnianego parametru debug.

Wynik tej akcji zobaczyłem w phpinfo():

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
with the ionCube PHP Loader v3.1.24, Copyright (c) 2002-2006, by ionCube Ltd., and
with Zend Optimizer v3.2.2, Copyright (c) 1998-2006, by Zend Technologies
with Zend Extension Manager v1.2.0, Copyright (c) 2003-2006, by Zend Technologies

Kody Apache’a

Ostatnio miałem problem ze prawidłową obsługa ErrorDocument, tj. zapisaniem w logu serwera httpd wpisu o kodzie 404.
Gdy mamy np. błędną stronę typu /index.php?page=NieMaTakiejStrony i wiemy, że faktycznie takiej strony nie ma, to samo ustawienie w httpd.conf:

ErrorDocument 404 /index.php?page=404

powodowało, że wyświetlała mi się przygotowana wcześniej w CMSie strona z treścią informacyjną o nieznalezieniu strony, natomiast w logach apache’a widziałem wpis typu:

/index.php?page=404 200 OK

Problem polegał na tym, że widząc informację o błędzie, w logu serwera www zapisywała się informacja, że nie był to błąd.
Musiałem zastosować małą sztuczkę. W httpd.conf ustawiłem:

ErrorDocument 404 /404.php

Czyli plik inny aniżeli jeden spośród stron dynamicznych ładowanych z contentu. Jego źródło wygląda następująco (tylko 2 linijki):

header(„HTTP/1.0 404 Not Found”);
echo file_get_contents(„/index.php?page=404″);

Czyli najpierw wysyłam do serwera www nagłówek z kodem 404 Not Found, a następnie wyświetlam treść strony, do której poprzednio prowadziła użytownika aplikacja CMS.
Dzięki tej sztuczce w logach apache’a mamy wpis

/index.php?page=NieMaTakiejStrony 404 -

Czyli użytkownik widzi informację o nieznalezieniu strony, a w logach apache’a zapisuje się info o błędzie strony.

Po takim tricku jesteśmy szczęśliwi.

Poniżej zamieszczam listę kodów błędów - napewno komuś się przyda.

Successful Client Requests
200 - OK
201 - Created
202 - Accepted
203 - Non-Authorative Information
204 - No Content
205 - Reset Content
206 - Partial Content

Client Request Redirected
300 - Multiple Choices
301 - Moved Permanently
302 - Moved Temporarily
303 - See Other
304 - Not Modified
305 - Use Proxy

Client Request Errors
400 - Bad Request
401 - Authorization Required
402 - Payment Required (not used yet)
403 - Forbidden
404 - Not Found
405 - Method Not Allowed
406 - Not Acceptable (encoding)
407 - Proxy Authentication Required
408 - Request Timed Out
409 - Conflicting Request
410 - Gone
411 - Content Length Required
412 - Precondition Failed
413 - Request Entity Too Long
414 - Request URI Too Long
415 - Unsupported Media Type

Server Errors
500 - Internal Server Error
501 - Not Implemented
502 - Bad Gateway
503 - Service Unavailable
504 - Gateway Timeout
505 - HTTP Version Not Supported

Czasami się przydaje.