Bei der Verwendung von PHP für die Bildverarbeitung wird die Funktion der ImagecrreatTueColor häufig verwendet, um ein echtes Farbblankbild zu erstellen. Die Funktion besteht darin, eine echte Farbbildressource mit einer bestimmten Breite und Höhe zu erstellen, die häufig in der Funktion dynamischer Erzeugung von Bildern zu finden ist. Im Allgemeinen verursacht diese Funktion selbst keine Probleme, aber wenn Sie auf einen Fehler "bereits gesendet" stoßen, wird dies normalerweise aus irgendeinem Grund aufgrund der HTTP -Headerinformationen im Voraus ausgegeben. Als nächstes werden wir detailliert untersuchen, was diesen Fehler verursacht und wie er löst.
Der Fehler "bereits gesendet" tritt normalerweise auf, wenn Sie versuchen, HTTP -Header vor dem Ausgabe des Inhalts zu senden. PHP muss HTTP -Header -Informationen wie Inhaltstyp, Zeichencodierung, Cache -Steuerung usw. senden, bevor Inhalte (z. B. HTML, Bilder oder Dateien) an den Browser gesendet werden. Dieser Fehler wird ausgelöst, wenn Sie die Reihenfolge des Sendens von Header -Informationen nicht ordnungsgemäß steuern, bevor das Skript den Inhalt ausgibt.
Wenn Sie ImagecrreatTueColor verwenden, um Bilder zu generieren, stellen Sie normalerweise den Antwortheader mit der Header () -Funktion fest und geben dem Browser mit, dass Sie das Bild anstelle der HTML -Seite ausgeben. Wenn HTML -Inhalt oder andere Textinformationen vor dem Aufrufen von ImagecrreatTruecolor ausgegeben werden, führt dies zu einem Fehler mit "bereits gesendeten" Headers "Fehler.
Häufige Ursachen für Fehler sind:
Leerzeichen oder Newlines: Leerzeichen oben oder unten in der Datei, Zeilenunterbrechungen, BOM (Byte -Bestellmarken) usw. senden vor dem PHP -Parsen einige unsichtbare Zeichen an den Browser.
HTML -Ausgabe: Wenn das Skript vor dem Aufrufen von ImageCrreatTueColor HTML -Inhalt ausgibt, kann PHP keine HTTP -Header -Informationen mehr senden.
Debugging Output: Während des Entwicklungsprozesses werden auch Debugging -Funktionen wie Echo , Print_r oder var_dump zur Ausgabedebugging -Informationen im Voraus gesendet, was zu Fehlern führt.
Imagecrreatetruecolor muss in Verbindung mit Header () verwendet werden, um den MIME -Bildtyp des Bildes anzugeben. Beispielsweise müssen Sie dem Browser mitteilen, dass dies ein PNG -Bild ist, bevor Sie die Bilddaten senden:
<span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span></span>
Wenn eine Ausgabe (z. B. HTML, Leerzeichen oder Newlines) vor dem Aufrufen von ImagecrreatTueColor oder imagePng gesendet wurde, kann PHP diese Header nicht erneut senden, was zu einem "bereits gesendeten" Headers "Fehler führt.
Um dieses Problem zu lösen, müssen wir sicherstellen, dass das PHP -Skript nichts sendet, bevor das Bild ausgegeben wird. Hier sind einige gemeinsame Lösungen:
Stellen Sie sicher, dass oben und unten in der PHP -Datei keine Leerlauf- oder Boms -Boms vorhanden sind. Vor allem, nachdem PHP das Tag <? Php oder das Tag beendet ?> Stellen Sie sicher, dass keine zusätzlichen Räume oder Neuleitungen vorhanden sind. Sie können beim Öffnen einer Datei nach unsichtbaren Zeichen suchen, insbesondere bei Verwendung eines Editors.
Stellen Sie sicher, dass nichts anderes in den Browser ausgegeben wird, bevor Sie die Funktionen im Bild der ImageCrreatetruecolor und Header () aufrufen. Vermeiden Sie Echo , VAR_DUMP oder PRINT_R -Debug -Ausgabe vor diesen Funktionen. Wenn die Debug -Informationen ausgegeben werden müssen, sollten Sie sie zwischen OB_Start () und ob_end_flush () platzieren, um die Ausgabe vorübergehend zu puffern.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Schalten Sie den Ausgangspuffer ein</span></span><span>
</span><span><span class="hljs-comment">// Ihr Code</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// Beenden Sie den Ausgangspuffer</span></span><span>
</span></span>
Wenn Sie vor dem Aufrufen von ImageCrreatTrueColor eine Ausgabe in Ihrer Datei ausführen müssen, können Sie die Ausgabepufferung verwenden. Mit der Funktion OB_Start () schneidet PHP alle Ausgaben aus und wird nicht sofort an den Browser gesendet. Dies bedeutet, dass Sie Debug -Informationen oder andere Inhalte frei ausgeben können, bevor das Bild ausgegeben wird.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Ausgangspufferung starten</span></span><span>
</span><span><span class="hljs-comment">// Codeausgabeteil</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">300</span></span><span>, </span><span><span class="hljs-number">300</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>); </span><span><span class="hljs-comment">// Bilddaten senden</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Klären und die Pufferung ausschalten</span></span><span>
</span></span>
Manchmal kann die Option output_buffer in der PHP -Konfigurationsdatei Auswirkungen auf das Verhalten des Ausgabebufers haben. Stellen Sie sicher, dass es aktiviert oder ordnungsgemäß konfiguriert ist, insbesondere beim Umgang mit größeren oder dynamisch erzeugten Bildern.
<span><span><span class="hljs-attr">output_buffering</span></span><span> = </span><span><span class="hljs-literal">On</span></span><span>
</span></span>
Bei der Begegnung auf den Fehler "bereits gesendete" Headers "ist die Taste zu überprüfen, ob im Code ausgegeben wird, bevor das Bild gesendet oder die Header -Informationen festgelegt werden. Dieses Problem wird normalerweise gelöst, indem unnötige Whitespace -Zeichen ausgeschlossen, Debug -Informationen ausgegeben oder einen Ausgabebuffer verwendet werden. Die richtige Art und Weise besteht darin, sicherzustellen, dass alle Headerinformationen eingerichtet werden, bevor die Bilddaten ohne unnötige Ausgabeinstörungen gesendet werden.
Hoffentlich können Sie durch diesen Artikel die Fehler "Headers bereits gesendet" verstehen, die bei der Verwendung von ImagecrreatTueColor auftreten können, und können diese während der Entwicklung effektiv vermeiden.