Warning: Cannot modify header information - headers already sent by (oxpec_class_file_paths.php)

Hallo,
von Zeit zu Zeit passiert folgendes

Warning: Cannot modify header information - headers already sent by (output started at /pfad/zu/tmp/oxpec_class_file_paths.php:64) 

Sowohl im Backend und schlimmer im Frontend auch.

Ich weiß nicht recht wie ich das einordnen soll, Fehler bei mir? Oder im System?

Irgendwo bin ich mal über eine Funktion gestolpert, die Cache-krempel sammelt und erst am Ende in die entsprechende Datei im tmp/ schreibt. Kann sein, dass damit was nicht stimmt? Also die Datei geschrieben und zufällig eben grade gelesen wird? Den meist passt die Zeilenangabe in der Meldung nicht zur Datei wenn man sie sich dann anschaut.

tschüs, Stefan

Hallo Stefan,

“von Zeit zu Zeit” mag ich irgendwie gar nicht.
Hast Du schonmal eine oxchkversion drüber laufen lassen?

Gruß

Hallo Marco,

“von Zeit zu Zeit” mag ich irgendwie gar nicht.
Ich weiß, das machte es richtig schön nachvollziehbar :slight_smile:

Ich weiß aber auch dass ich nicht alleine bin mit der Meldung. Und es ist mir zum ersten mal jetzt mit der 4.5er aufgefallen.

oxchkversion
ist was nochmal gleich?

adios, Stefan

nix persönliches - einfach weils so schön ist :smiley:

oxchkversion

Hola,

oxchkversions hat nix gemeldet, kein Wunder, es ist ja auch eine Datei im cache und sowieso enthält die ja auch kein Fehler zumindest nicht wenn man sie nach der Meldung öffnet. Das Verhalten wird woanderst verursacht.

adios, Stefan

Hallo,

ja bei mir auch… interessantes Verhalten. Scheint beim “erzeugen” der Cache Dateien zu passieren. Sowohl back- als auch frontend…
Verhalten unterschiedlich, scheint ein Versionsthema php, zend, … am Server zu sein.
Hat jemand einen Tipp oder gar eine Lösung???

Grüße,
Christian

Hallo Christian

Das steht schon im bugtracker, link habe ich grad nicht.

Ich kann Dir nur einen Hack anbieten, der bei mir funktioniert und die Ausführungszeit der Autoload-Funktion wieder dort hin bewegt wo sie hingehört. In den unteren Teil des Profilers.

core/oxfunctions.php

~56

if (!$aClassPaths) {
        $aClassPaths = oxUtils::getInstance()->fromPhpFileCache("class_file_paths");
}

Ändern in

// @stefan Hack Fehler beim speichern der cachedatei.
$sCacheFile = getShopBasePath() . 'tmp/_hz_autoload_file_paths.serial.txt';
if (!$aClassPaths) {
    //$aClassPaths = oxUtils::getInstance()->fromPhpFileCache("class_file_paths");
    $aClassPaths = array();
    if( is_file( $sCacheFile ) ) {
        $aClassPaths = unserialize(
            file_get_contents( $sCacheFile )
        );
    }
}

Dann ~ 85

$aClassPaths[$sClass] = $sFilename;
                oxUtils::getInstance()->toPhpFileCache("class_file_paths", $aClassPaths);

Ändern in

$aClassPaths[$sClass] = $sFilename;
                // @stefan Hack Fehler beim speichern der cachedatei.
                //oxUtils::getInstance()->toPhpFileCache("class_file_paths", $aClassPaths);
                file_put_contents( $sCacheFile, serialize( $aClassPaths ) );

Das hebelt die oxid-eigene Funktion aus. Ich weiß also nicht genau ob das bei z.B. verteilten Servern noch funktioniert. Für den Standard-Fall sollte das allerdings gut sein

adios, Stefan