2017-09-11 1 views
0

Ich weiß, was macht Destruktor in PHP OOP, aber eine Sache, die ich möchte wissen, was ist die Beziehung von HTTP-Header und Verzeichnis mit Destruktor in PHP?Was ist die Beziehung von HTTP-Headern und Verzeichnis mit Destruktoren in PHP?

Kann jemand sagen, was es bedeutet?

Destruktoren, die während des Herunterfahrens des Skripts aufgerufen werden, haben bereits HTTP-Header gesendet. Das Arbeitsverzeichnis in der Skript-Shutdown-Phase kann bei einigen SAPIs (z. B. Apache) unterschiedlich sein.

Dies ist dokumentiert in Destructor in Referenzlink unten.

http://php.net/manual/en/language.oop5.decon.php

+0

Es bedeutet "versuchen Sie nicht, etwas wie' header() 'in' __destruct() '" und "der Zustand Ihrer Anwendung möglicherweise während der Ausführung geändert haben". – Sammitch

Antwort

0

das zu erklären versucht, wenn die destructor headers_sent() aufgerufen wird gibt true zurück und es gibt uns die Köpfe bis das Verzeichnis arbeiten könnte anders sein, wenn der Destruktor aufgerufen wird (Es kann nicht gleich sein so wie es während des Konstruktors war oder wenn die anderen Methoden aufgerufen wurden (normalerweise arbeitet das Verzeichnis im Arbeitsverzeichnis). Die Umgehung besteht darin, absoluten Pfad zu verwenden oder chdir() zu verwenden;

Sie müssen also vorsichtig sein, wenn Sie Aktionen wie folgt:

class Files{ 

    function __destruct() { 
      unlink($this->logfile); // it may be wrong if it is relative path 
    }  
} 

zurück zum ersten Teil gehen, wenn die Destruktoren aufgerufen werden, wird Header bereits gesendet. Sie werden nicht in der Lage sein, Dinge, die von "Header gesendet" abhängen. Zum Beispiel Redirect- oder Initialisierungssitzung.

Verwandte Themen