Wpis z mikrobloga

Witam, czy ktoś spotykał się z takim błędem:

PHP Error [2]

include(HttpRequest.php): failed to open stream: No such file or directory (/home/site/framework/YiiBase.php:397)

#0 /home/site/framework/YiiBase.php(397): YYYApplication->handleError()
#1 /home/site/framework/YiiBase.php(397): autoload()
#2 unknown(0): autoload()
#3 /var/www/site2/app/controllers/web_controller.php(3847): spl_autoload_call()
#4 unknown(0): WebController->XXXPostAction()
#5 /var/www/site2/library/Boot.php(227): call_user_func_array()
#6 /var/www/site2/index.php(65): require_once()

Błąd mam po storzeniu nowego objektu: $objRequest = new HttpRequest($sUrl);

var_dump('test'); // tu wyświetla var_dump
$objRequest = new HttpRequest($sUrl);
var_dump('test2'); // tu nie wyświetla var_dump

var_dump(class_exists('HttpRequest'); // zwraca false
Strona działa tak, że część działa na jednym frameworku, a do tego dołączony jest framework Yii 1.1 jako wspomagający pracę tego pierwszego. Podejrzewam, że nie jest ładowane peclhttp i dlatego to nie działa, ale nie wiem gdzie mam szukać problemu, bo do tej pory wszystko działało bez zarzutu. Podejrzewałem, że to może być związane z konfiguracją strony, ale moduły strony z Yii działają bez zarzutu.
W jaki sposób mogę zrobić include lub autoload, aby httpRequest zaczął działać?

#php #yii #webdev
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Lipathor: Ale do tej pory wszystko działało i to miejsce nie było zmieniane. Na serwerze staging wszystko działa, a na testowym - nie. Na serwerze staging, co prawda jest starsza wersja systemu, ale pliki kontrolera są identyczne, pliki modelu są identyczne. Na pewno nie było nic zmieniane co miałoby powiązania z HttpRequest.
  • Odpowiedz
(/home/site/framework/YiiBase.php:397)


@mariecziek: tu masz podane gdzie się zaczyna błąd. Zobacz co masz w tej linii, jakie zmienne i co chcesz tam otwierać - może jakiś log, albo jakaś zmienna z konfiga którą masz różną na dev, stage czy prod.
  • Odpowiedz
public static function autoload($className)
    {
        // use include so that the error PHP file may appear
        if (isset(self::$classMap[$className]))
            include(self::$classMap[$className]);
        elseif (isset(self::$_coreClasses[$className]))
  • Odpowiedz
@mariecziek: Yii 1 czy 2? Bo jak 1, to oryginalna klasa ma nazwę CHttpRequest. Jeśli używasz HttpRequest (bez "C" na początku), to znaczy, że masz swoją własną klasę, która dziedziczy po tej z Yii. Widocznie autoloader nie może jej z jakiegoś powodu znaleźć. Sprawdź czy na pewno istnieje i czy ścieżka do niej jest dodana do "import" w konfiguracji.
  • Odpowiedz
@mariecziek: A tak w ogóle to nie zastanawia Cię, że w komunikacie błędu przeplatają Ci się /home/site/ z /var/www/site2? Może przeniosłeś jakąś ścieżkę z konfiguracji DEV na LIVE?
  • Odpowiedz
@sowiq: Problem jest taki, że strona chodzi na kilku frameworkach i nie wszystko jest wykorzystywane z Yii1.1. Tutaj akurat jest "stary" framework i korzysta tylko z funkcji PHP. Myślałem o przepisaniu tego korzystając z Yii CHttpRequest, ale skoro to działa na serwerze produkcyjnym i staging, a nie działa na testowym, to nie jest to problem samego HttpRequest, a czegoś co zmieniło się w kodzie/konfiguracji serwera.
@sowiq: Nie. Ponieważ
  • Odpowiedz
Dziwnie, że do tej pory nie było z tym problemów.


@mariecziek: Nie robiliście może upgrade PHP do 5.6, z racji zakończenia wsparcia dla 5.5? Wczoraj był boom informacyjny na ten temat :D Słyszałem, że po upgrade niektóre rozszerzenia PECL odmówiły posłuszeństwa.
  • Odpowiedz
@sowiq: Sprawdzę wersję PHP na serwerze, ale ten błąd został zgłoszony 12 czerwca, a ja miałem ważniejszą pracę na głowie i dopiero wczoraj rozpocząłem poszukiwania źródła błędu.
  • Odpowiedz