Grundlagen der Nutzung. Berichte, Drucken im Programm Korrekter Hilfebericht PHP

29. Dezember 2012 um 22:01 Uhr
  • Microsoft SQL Server

Wir schauen uns weiterhin nützliche Tipps für Anfänger beim Erstellen von Berichten in Microsoft Reporting Services an.
Den Anfang finden Sie hier:
Für Interessierte klicken Sie bitte unten...

0) Wie platziere ich mehrere Steuerelemente in einer Tabellenzelle?
Sehr oft besteht die Notwendigkeit, mehrere Steuerelemente in einer Tabellenzelle zu platzieren. Wenn Sie ein Steuerelement einfach in eine Zelle ziehen, wird diese vollständig ausgefüllt. Ein Steuerelement namens „Rectangle“ hilft, aus dieser Situation herauszukommen.

Rechteck ist ein Analogon des in WinForms verwendeten Panel-Steuerelements; es ist eine Art Plattform zum Platzieren von Steuerelementen. Wenn es in einer Zelle platziert wird, füllt das Rechteck die gesamte Tabellenzelle aus und schafft so eine „Plattform“ für die Platzierung anderer Steuerelemente.

1) Legen Sie die Standardberichtssprache fest
Versuchen Sie beim Erstellen von Berichten, die Berichtssprache zu deklarieren (Berichtseigenschaften – Sprache).

Dies ist sehr nützlich, wenn Sie mit einem ausländischen Kunden arbeiten, dessen regionale Einstellungen von Ihren abweichen. Wenn Sie nicht wissen, welche Einstellungen Ihr Client verwendet, können Sie einen Ausdruck mit folgendem Inhalt angeben:
=Benutzer!Sprache
Auf diese Weise vermeiden Sie Unregelmäßigkeiten bei der Formatierung von Zahlenwerten, Datums- und Uhrzeitangaben, Währungen usw., die der Kunde erwartet.
2) String-Verkettung
Manchmal besteht die Notwendigkeit, den Wert eines Felds aus der Datenbank in den statischen Text eines Berichts einzufügen, beispielsweise in einer Textbox. Mit anderen Worten: Sie müssen Textzeilen zu einer Zeile hinzufügen. Zu diesem Zweck stellt SSRS einen „&“-Operanden zur Verfügung.
Angenommen, in der Texbox haben wir einen statischen Text „Hallo, uv. Iwan Iwanowitsch…“. Wir müssen Ivan Ivanovich durch den vollständigen Namen aus der Datenbank, aus dem Fio-Feld, ersetzen. Klicken Sie dazu mit der rechten Maustaste auf die Texbox, rufen Sie das Kontextmenü auf, wählen Sie die Eigenschaft Ausdruck der Texbox aus und ändern Sie den Text wie folgt:
=“ Hallo, uv. „&Fields!fio.Value&“ …“
aktualisiert: Wie der angesehene Autor in einem Kommentar vorgeschlagen hat, ist die Verwendung von Platzhaltern eine korrektere Möglichkeit, Zeichenfolgen zu verketten.
Die Verwendung ist einfach: In Texbox müssen Sie den Cursor an der Stelle positionieren, an der Sie den Wert aus dem Datenbankfeld einfügen möchten. Öffnen Sie mit einem Rechtsklick das Kontextmenü und wählen Sie „Platzhalter erstellen...“

Legen Sie den Wert „Label“ (dieser Wert wird im Text sichtbar sein; wenn Sie keinen Wert für das Feld „Label“ angeben, wird der Name des Felds aus der Datenbank verwendet) und „Wert“ (in unserem Fall ist dies ein Feld aus der Datenbank) fest Datenbank)

Die Verwendung von Platzhaltern bietet zusätzliche Vorteile:
1) Der Text im Steuerelement ist sichtbar (bei der von mir beschriebenen Methode sieht der Benutzer nur den Text <>, was eine Person, die den Berichtscode zum ersten Mal sieht, verwirrt und ihre Zeit mit der Suche nach dem gewünschten Ausdruck verschwendet.)
2) Mit Platzhalter können Sie das Feld formatieren (Datenformat festlegen, Schriftart, Farbe, Ausrichtung usw. ändern), ohne die Formatierung des Haupttexts zu ändern.

Der Unterschied liegt auf der Hand:

3) Möglichkeiten zum Formatieren numerischer Daten
SSRS bietet mehrere Optionen zum Formatieren von Daten. Die einfachste Möglichkeit zur Formatierung besteht darin, das Format (Format-Eigenschaft) in den Steuerelementeigenschaften anzugeben.

Diese Methode hat 2 Nachteile:
1) Das Steuerelement enthält zusätzlich zu den Daten, die formatiert werden sollen, zusätzlichen Text.
2) beim Exportieren eines Berichts nach CML
Dieses Problem kann durch den Aufruf spezieller Methoden gelöst werden. Schauen wir uns ein Beispiel an:
Das Textfeld enthält den folgenden Text: „Sehr geehrter Kunde, der Saldo auf Ihrem Konto beträgt: „ & Fields!UserBalance.Value & „ rub.“ .
Wenn Sie nicht formatieren, kann der Fields!UserBalance.Value-Wert, sofern er 1005,35 beträgt, dem Benutzer als 1005,350000000000 angezeigt werden. Um einen solchen Vorfall zu vermeiden, ist es notwendig, die Methode anzuwenden Format oder FormatNumber.
Anwendungsbeispiel: „Sehr geehrter Kunde, der Saldo auf Ihrem Konto beträgt „& Format(Fields!UserBalance.Value“,#,##0,00“) & „rub.“
„Sehr geehrter Kunde, der Saldo auf Ihrem Konto beträgt „ & FormaNumber(Fields!UserBalance.Value,2) & „ rub.“
Bei der Verwendung von Format müssen Sie eine Formatierungsmaske verwenden; bei der Verwendung von FormaNumber reicht es aus, die Anzahl der Dezimalstellen anzugeben.
Hinweis: Die Formatierungsmethode ist auch zum Formatieren von Datum, Uhrzeit, Geld usw. anwendbar.

4) Exportieren Sie den Bericht in das XML-Format und passen Sie die Felder an
Mit SSRS können Sie einen Bericht in verschiedene Formate exportieren, eines davon ist CML. Jedes Berichtssteuerelement verfügt über 3 Eigenschaften, die für das Verhalten beim Export nach CML verantwortlich sind.

Schauen wir sie uns genauer an:
Datenelementname– ist für den Namen des Elements in HML verantwortlich, der Standardwert ist nicht erfüllt. Wenn Sie dieses Element nicht ausführen, entspricht der Name in CML dem Namen des Steuerelements.
DataElementOutput– Die Eigenschaft ist dafür verantwortlich, ob das Element nach XML exportiert wird oder nicht. Einstellbare Werte:
Auto(Standardwert) – das Element wird exportiert, wenn es einen Wert hat; wenn der Wert null ist, wird es nicht exportiert.
Ausgabe– Das Element wird immer exportiert.
Keine Leistung– Das Element wird nicht nach HML exportiert
DataElementStyle– ist verantwortlich für den Stil eines Elements in HML (sei es ein Element oder ein Attribut)
Werte, die verwendet werden können:
Auto(Standardwert) – je nach Steuerelement wird es als Element (Knoten) oder Attribut (Attribut) exportiert. Tatsächlich wird standardmäßig nur die Texbox als Attribut exportiert, die übrigen Elemente werden als Knoten exportiert.
Attribut– Der Wert wird als Attribut dargestellt
Element– der Wert wird als Element (Knoten) dargestellt
Eine wichtige Funktion: Die Hidden-Eigenschaft gilt nicht für den Export nach CML. Wenn Sie also in CML ein Element exportieren möchten, das basierend auf einer Bedingung angezeigt wird oder nicht, muss diese Bedingung an das Expression-Steuerelement übergeben werden. Beispiel: Ein Textfeld enthält Text, der nur angezeigt wird, wenn die Feldbedingung = 1 ist. Dann sieht der Ausdruck so aus:
=IIF(Fields!Condition.Value = 1, „Some text““,“)

Das ist alles für heute, Fortsetzung folgt.

Die größte Funktionalität steht zur Verfügung, wenn der AI-BOLIT-Scanner im Befehlszeilenmodus ausgeführt wird. Dies kann sowohl unter Windows/Unix/Mac OS

Bitte beachten Sie, dass zum Ausführen des Scanners die Konsolenversion von PHP 5.3 und höher erforderlich ist. In Version 5.2 wird in /home/ХХХ/ai-bolit.php online der Fehler „Parse-Fehler: Syntaxfehler, unerwarteter T_STRING, erwartet T_OLD_FUNCTION oder T_FUNCTION oder T_VAR oder „)“ angezeigt. Überprüfen Sie die aktuelle Version mit php -v

Hilfe zu den Befehlszeilenparametern des AI-BOLIT-Scanners

Zeig Hilfe

php ai-bolit.php --help

php ai-bolit.php --skip=jpg,png,gif,jpeg,JPG,PNG,GIF,bmp,xml,zip,rar,css,avi,mov

Scannen Sie nur bestimmte Erweiterungen

php ai-bolit.php --scan=php,php5,pht,phtml,pl,cgi,htaccess,suspected,tpl

Bereiten Sie eine Quarantänedatei zum Senden an Sicherheitsspezialisten vor. Es wird ein Archiv AI-QUARANTINE-XXXX.zip mit einem Passwort erstellt.

php ai-bolit.php --quarantine

Führen Sie den Scanner im „paranoiden“ Modus aus (empfohlen, um den detailliertesten Bericht zu erhalten)

php ai-bolit.php --mode=2

php ai-bolit.php --mode=1

Überprüfen Sie eine Datei „pms.db“ auf Schadcode

php ai-bolit.php -jpms.db

Führen Sie den Scanner mit einer Speichergröße von 512 MB aus

php ai-bolit.php --memory=512M

Legen Sie die maximale Größe der gescannten Datei auf 900 KB fest

php ai-bolit.php --size=900K

Pause 500 ms zwischen den Dateien beim Scannen (um die Belastung zu reduzieren)

php ai-bolit.php --delay=500

Scanbericht per E-Mail senden [email protected]

php ai-bolit.php [email protected]

Erstellen Sie einen Bericht in der Datei /home/scanned/report_site1.html

php ai-bolit.php --report=/home/scanned/report_site1.html

Scannen Sie das Verzeichnis /home/s/site1/public_html/ (der Standardbericht wird dort erstellt, wenn die Option --report=report_file nicht angegeben ist).

php ai-bolit.php --path=/home/s/site1/public_html/

Führen Sie den Befehl aus, wenn der Scanvorgang abgeschlossen ist.

php ai-bolit.php --cmd="~/postprocess.sh"

Erhalten Sie einen Bericht im Klartext mit dem Namen site1.txt

php ai-bolit.php -lsite1.txt

Sie können Anrufe beispielsweise kombinieren,

php ai-bolit.php --size=300K --path=/home/s/site1/public_html/ --mode=2 --scan=php,phtml,pht,php5,pl,cgi,suspected

Durch die Kombination des Aufrufs des AI-BOLIT-Scanners mit anderen Unix-Befehlen können Sie beispielsweise einen Batch-Scan von Websites durchführen. Nachfolgend finden Sie ein Beispiel für die Überprüfung mehrerer innerhalb eines Kontos gehosteter Websites. Wenn sich Websites beispielsweise im Verzeichnis /var/www/user1/data/www befinden, lautet der Befehl zum Starten des Scanners

find /var/www/user1/data/www -max Depth 1 -type d -exec php ai-bolit.php --path=() --mode=2 \;

Durch Hinzufügen des Parameters --report können Sie das Verzeichnis steuern, in dem Scanberichte generiert werden.

php ai-bolit.php Liste der Parameter... --eng

Stellen Sie die Berichtsoberfläche auf Englisch um. Dieser Parameter sollte an letzter Stelle stehen.

Integration mit anderen Diensten und in das Hosting-Panel

php ai-bolit.php --json_report=/path/file.json

Generieren Sie einen Bericht im JSON-Format

php ai-bolit.php --progress=/path/progress.json

Speichern Sie den Verifizierungsstatus in einer Datei im JSON-Format. Diese Datei enthält strukturierte Daten im JSON-Format: die aktuelle Scandatei, wie viele Dateien gescannt wurden, wie viele Dateien noch gescannt werden müssen, der Prozentsatz des Scans, die Zeit bis zum Abschluss des Scans. Dieser Mechanismus kann verwendet werden, um einen Fortschrittsbalken und Daten zu den gescannten Dateien im Panel anzuzeigen. Sobald der Scan abgeschlossen ist, wird die Datei automatisch gelöscht.

php ai-bolit.php --handler=/path/hander.php

Externer Eventhandler. Sie können Ihre eigenen Scan-Start-/Ende-/Scan-Fortschritts-/Scan-Fehlerhandler hinzufügen. Eine Beispieldatei kann im Scanner-Archiv im Verzeichnis tools/handler.php eingesehen werden. Beispielsweise können Sie nach Abschluss des Scanvorgangs etwas mit der Berichtsdatei tun (per E-Mail versenden, archivieren usw.).

In dieser Lektion lernen wir so etwas wie das Verstecken von PHP-Fehlern. Nebenbei schauen wir uns auch an, wie man nicht nur die Ausgabe dieser Fehler unterdrückt, sondern auch, wie man sie in eine Protokolldatei schreibt, wie man diese Protokolldatei schützt, wie man die PHP-Fehlermeldestufe konfiguriert (wie schwerwiegend Fehler sind). um anzuzeigen, ob Warnungen angezeigt werden sollen), erfahren Sie, wie Sie die maximale Größe von Fehlerzeilen festlegen und die Aufzeichnung wiederholter Fehler deaktivieren.

Soll ich PHP-Fehler verbergen?

PHP-Fehler liefern eine Vielzahl von Informationen, die es Angreifern ermöglichen, Daten über Ihre Website und Ihren Server zu sammeln. Aber wenn die Antwort auf diese Frage eindeutig „Ja“ wäre, dann wäre alles gelöst, indem man mit PHP-Programmen zu jeder Datei eine einzige Zeile hinzufügt

Error_reporting(0);

Tatsächlich sollten alle Fehler, einschließlich Warnungen (nicht kritische Fehler), in der Testphase angezeigt werden. Die Anzeige von Fehlern und Warnungen hilft Ihnen außerdem, bestehende (oder mögliche) Probleme in Ihrer Arbeitsumgebung zu verstehen. Sie sollten die Anzeige von Fehlern und Warnungen in Programmen, die zur kostenlosen Verteilung bestimmt sind, nicht unterdrücken, denn wenn Probleme auftreten, sind alle Benutzerberichte über Probleme gleich: „Es gibt einen weißen Bildschirm“, was die Versuche, es herauszufinden, erheblich erschwert.

Im Allgemeinen besteht auf Servern, die für die Entwicklung vorgesehen sind (z. B. auf einem Heimserver), keine Notwendigkeit, Fehler und Warnungen mithilfe von PHP-Methoden zu löschen error_reporting(0); Und @ – Sie müssen ihre Ursachen untersuchen und den Quellcode korrigieren.

Auf Produktionsservern wird dringend empfohlen, nicht alle Fehler anzuzeigen, die im PHP-Code aufgetreten sind. Es wird jedoch empfohlen, nicht nur deren Anzeige zu unterdrücken, sondern auch ein Protokoll darüber zu führen und sie für den Systemadministrator und für PHP aufzuschreiben Programmierer – aus diesen Protokollen erhalten sie wichtige Informationen über mögliche Probleme auf der Site/dem Server.

So aktivieren Sie die PHP-Fehlerprotokollierung über .htaccess

In diesem Teil des Tutorials zeige ich Apache-Benutzern, wie sie die Ausgabe von PHP-Fehlern unterdrücken und sie vor Besuchern verbergen können. Gleichzeitig wird die Protokollierung von PHP-Fehlern für die weitere Analyse aktiviert. Die gesamte Konfiguration erfolgt über die .htaccess-Datei.

Im Allgemeinen hat diese Methode einen weiteren wunderbaren Vorteil: Anstatt zu versuchen, alle PHP-Fehler und -Warnungen abzufangen, werden wir jeden von ihnen in unserem persönlichen Protokoll aufzeichnen, sodass kein einziger Fehler, der auftritt, entgeht, auch wenn er nicht aufgetreten ist von Ihnen und von jemandem, der Ihre Website unter Bedingungen besucht, die Ihnen beim Modellieren vielleicht nicht einmal in den Sinn gekommen wären. Vielen Dank, es gibt eine einfache Möglichkeit, diese effektive Strategie umzusetzen.

PHP-Fehler vor Besuchern verbergen

Es gibt verschiedene Möglichkeiten, PHP-Fehler mithilfe von .htaccess zu unterdrücken. Dies kann erreicht werden, indem Sie die folgenden .htaccess-Anweisungen in die httpd.conf-Datei Ihrer Domain oder in das Stammverzeichnis (oder ein anderes Zielverzeichnis) der .htaccess-Datei mit folgendem Inhalt einfügen:

# PHP-Fehler unterdrücken php_flag display_startup_errors aus php_flag display_errors aus php_flag html_errors aus php_value docref_root 0 php_value docref_ext 0

Dies führt dazu, dass PHP-Fehler nicht mehr auf Ihrer Website öffentlich angezeigt werden. Dies eliminiert potenzielle Sicherheitsrisiken und verhindert, dass diese hässlichen, unverständlichen PHP-Fehler das Layout Ihrer Website beeinträchtigen und Ihre Besucher verwirren. Hierfür ist keine Codebearbeitung erforderlich.

Aktivieren der persönlichen PHP-Fehlerprotokollierung

Nachdem wir PHP-Fehler nun vor der Öffentlichkeit verborgen haben, aktivieren wir die Protokollierung (Aufzeichnung), damit wir sie aufspüren können. Dies geschieht durch Hinzufügen der folgenden .htaccess-Anweisungen zur httpd.conf-Datei Ihrer Domain oder zu Ihrer .htaccess-Datei, die im Stammverzeichnis (oder einem beliebigen Zielverzeichnis) abgelegt ist.

# PHP-Fehlerprotokollierung aktivieren php_flag log_errors auf php_value error_log /home/path/public_html/domain/PHP_errors.log

Damit dies funktioniert, müssen Sie den Pfad in der letzten Zeile so bearbeiten, dass er mit dem tatsächlichen Speicherort Ihrer PHP_errors.log-Datei übereinstimmt. Natürlich müssen Sie zusätzlich diese Datei erstellen und ihr die Berechtigungen 755 oder gegebenenfalls 777 erteilen. Schließlich müssen Sie diese Protokolldatei sichern, indem Sie diese letzten Codezeilen zu Ihrer .htaccess-Datei hinzufügen:

# Zugriff auf das PHP-Fehlerprotokoll verhindern

Nachdem nun alles eingerichtet ist, überprüfen Sie, ob alles ordnungsgemäß funktioniert, indem Sie einige PHP-Fehler auslösen. Möglicherweise möchten Sie auch die Sicherheit Ihrer Protokolldatei testen, indem Sie versuchen, über einen Browser darauf zuzugreifen.

Erweiterte PHP-Fehlerbehandlung mit .htaccess

Lassen Sie uns nun tiefer in dieses Thema eintauchen, zusätzliche Funktionen hinzufügen und verschiedene Implementierungen erkunden. Wir werden uns zunächst mit der Behandlung von PHP-Fehlern für Produktionsumgebungen befassen (z. B. Websites und Anwendungen, die online, aktiv und öffentlich sind), dann mit der Behandlung von Fehlern für Entwicklerumgebungen (z. B. in der Entwicklung befindliche Projekte, Tests usw.). privat usw.).

Steuern der PHP-Fehlerberichtsebene

Mit .htaccess ist es möglich, die Fehlerberichtsebene an Ihre praktischen Bedürfnisse anzupassen. Eine allgemeine Methode zur Überwachung der PHP-Fehlerraten lautet wie folgt:

# allgemeine Ansicht der Direktive zum Festlegen der PHP-Fehlerstufe php_value error_reporting number

Es gibt mehrere gängige Werte, die „Ziffer“ ersetzen können, darunter:

  • Die umfassendste Fehlermeldung(entspricht E_ALL) - verwenden Sie hierfür den Wert „32767“.
  • Vollständige Fehlermeldung- Für eine vollständige Protokollierung von PHP-Fehlern verwenden Sie den Wert „8191“, der die Protokollierung aller Elemente mit Ausnahme von Laufzeithinweisen über die Verwendung veralteter Konstrukte (Warnungen über Code, der in zukünftigen PHP-Versionen nicht funktioniert) umfasst.
  • Zend-Fehlerberichterstattung- Um sowohl schwerwiegende als auch nicht schwerwiegende Warnungen zur Kompilierungszeit aufzuzeichnen, die von der Zend-Skript-Engine generiert werden, verwenden Sie „192“.
  • Grundlegende Fehlerberichterstattung- Laufzeitbenachrichtigungen aufzeichnen. Zeigt an, dass während der Skriptausführung etwas passiert ist, das auf einen Fehler hinweisen kann, obwohl dieser auch während der normalen Programmausführung auftreten kann. Verwenden Sie dazu die Zahl „8“.
  • Minimale Fehlermeldungen- Nur schwerwiegende Laufzeitfehler protokollieren. Hierbei handelt es sich um Fehler, die nicht vom Skript selbst korrigiert werden können, wie z. B. Fehler bei der Speicherbelegung usw. In diesem Fall wird die Skriptausführung abgebrochen. Verwenden Sie dazu die Zahl „1“.

Natürlich können Sie auch andere Werte („Zahlen“) verwenden, um feiner abzustimmen, welche Fehler Sie aufzeichnen möchten. Einige Erläuterungen zu diesem Thema finden Sie ganz unten.

Legen Sie die maximale Dateigröße für die Aufzeichnung Ihrer Fehler fest

Mit .htaccess können Sie die maximale Größe Ihrer PHP-Fehler festlegen. Dies bedeutet, dass die Größe jedes aufgezeichneten Fehlers überwacht wird und nicht die gesamte Datei als Ganzes. Die Syntax lautet wie folgt:

# allgemeine Direktive zum Festlegen der maximalen Fehlergröße log_errors_max_len integer_number

Hier stellt „integer_number“ die maximale Größe in Bytes jeder geschriebenen Fehlerzeile dar. Der Standardwert ist „1024“ (also 1 Kilobyte). Um diese Grenze aufzuheben, können Sie den Wert auf „0“ setzen. Bitte beachten Sie, dass dieser Wert auch für angezeigte Fehler gilt, wenn diese aktiviert sind (z. B. während der Entwicklung).

Deaktivieren der doppelten Fehlerprotokollierung

Wenn Sie bereits mit dem Fehlerprotokoll gearbeitet haben, ist Ihnen vielleicht aufgefallen, dass es viele ähnliche Einträge enthält, die sich nur im Zeitpunkt des Ereignisses unterscheiden. Sie können diese Redundanz beseitigen, indem Sie einfach diese Zeilen zu Ihrer htaccess-Datei hinzufügen:

# Aufzeichnung wiederholter Fehler deaktivieren php_flagignore_repeated_errors on php_flagignore_repeated_source on

Mit diesen Einstellungen werden wiederholte Fehler nicht im Login erfasst, auch wenn sie in unterschiedlichen Quellen oder Adressen aufgetreten sind. Wenn Sie doppelte Fehler aus nur einer Quelle oder Datei deaktivieren möchten, kommentieren Sie einfach die letzte Zeile aus oder löschen Sie sie. Um umgekehrt sicherzustellen, dass Ihre Ereignisprotokolldatei alle doppelten Fehler enthält, ändern Sie beide Werte von An An aus.

Alles in allem: das Arbeitsumfeld

Nachdem wir die Funktionen zum Einrichten der PHP-Fehleraufzeichnung besprochen haben, sammeln wir alle unsere Einträge in einer .htaccess-Datei. Diese Einstellungen sind für die Arbeitsumgebung optimiert.

# PHP-Fehlerbehandlung für Produktionsserver php_flag display_startup_errors aus php_flag display_errors aus php_flag html_errors aus php_flag log_errors ein php_flagignore_repeated_errors aus php_flagignore_repeated_source aus php_flag report_memleaks ein php_flag track_errors ein php_value docref_root 0 php_value docref_ext 0 php_value error_log /home/path/public_html/domain/PHP_errors. log php_value error_reporting -1 php_value log_errors_max_len 0 Befehl, Erlauben, Verweigern, Verweigern von allen, Befriedigen aller

Wenn Sie Code mit Erklärungen für einen guten Stil halten, dann derselbe Code, aber mit Kommentaren:

# PHP-Fehlerbehandlung für den Produktionsserver # Anzeige von Startfehlern deaktivieren php_flag display_startup_errors aus # Anzeige aller anderen Fehler deaktivieren php_flag display_errors aus # HTML-Markup-Fehler deaktivieren php_flag html_errors aus # Fehlerprotokollierung aktivieren php_flag log_errors ein # Ignorieren wiederholter Fehler aktivieren php_flag discover_repeated_errors off # Ignorieren von Fehlern aus eindeutigen Quellen deaktivieren php_flagignore_repeated_source off # Aufzeichnung von PHP-Speicherlecks aktivieren php_flag report_memleaks on # die meisten der neuesten Fehler über php_errormsg speichern php_flag track_errors on # Formatierung von Fehlerreferenzlinks deaktivieren php_value docref_root 0 # Formatierung von Fehlern deaktivieren Referenzlinks php_value docref_ext 0 # Angabe des Pfads zur PHP-Fehlerprotokolldatei php_value error_log /home/path/public_html/domain/PHP_errors.log # Angabe eines Datensatzes aller PHP-Fehler php_value error_reporting -1 # Deaktivieren der maximalen Fehlerzeilenlänge php_value log_errors_max_len 0 # Schützen Sie die Fehlerprotokolldatei vor öffentlichem Zugriff Befehl, Erlauben, Verweigern, Verweigern von allen, Befriedigen aller

Die obige Strategie ist ideal für einen öffentlichen Server in einer Produktionsumgebung. Alle Fehler bleiben vor neugierigen Blicken verborgen, werden aber für Administratoren und Programmierer übersichtlich gesammelt. Selbstverständlich können Sie die vorgegebenen Richtlinien individuell an Ihre Bedürfnisse anpassen. Schauen wir uns nun eine Strategie zum Umgang mit Fehlern für die Entwicklungsumgebung an.

Alles zusammen – die Entwicklungsumgebung

Beim Entwickeln oder Debuggen eines Programms ist es bequemer, auftretende PHP-Fehler in Echtzeit direkt im Browser zu verfolgen. Nachfolgend finden Sie ein Beispiel für .htaccess mit den entsprechenden Einstellungen für die Entwicklungsumgebung:

# Arbeiten mit PHP-Fehlern für Entwicklerserver php_flag display_startup_errors auf php_flag display_errors auf php_flag html_errors auf php_flag log_errors auf php_flagignore_repeated_errors aus php_flagignore_repeated_source aus php_flag report_memleaks auf php_flag track_errors auf php_value docref_root 0 php_value docref_ex t 0 php_value error_log /home/path/public_html/domain/ PHP_errors .log php_value error_reporting -1 php_value log_errors_max_len 0 Befehl, Erlauben, Verweigern, Verweigern von allen, Befriedigen aller

Wir werden nicht jede Zeile erklären – die entsprechenden Erklärungen finden Sie etwas weiter oben.

Hinweise

Um den absoluten Pfad zur Protokolldatei auf dem Server mithilfe von PHP-Methoden herauszufinden (für die php_value error_log-Direktive)

echo dirname(__FILE__);

Beispiel.htaccess für .

php_flag display_startup_errors auf php_flag display_errors auf php_flag html_errors auf php_flag log_errors auf php_flagignore_repeated_errors aus php_flagignore_repeated_source aus php_flag report_memleaks auf php_flag track_errors auf php_value docref_root 0 php_value docref_ext 0 php_value Fehler _log C :ServerdatahtdocsPHP_errors.log php_value error_reporting -1 php_value log_errors_max_len 0 Befehl, Erlauben, Verweigern, Verweigern von allen, Befriedigen aller

Das ____ funktioniert nicht

Diese Methode ist nicht auf Hostings anwendbar, auf denen PHP als CGI läuft(Mögliche Lösungen werden im nächsten Artikel aufgezeigt).

-1 und ~0, um alle PHP-Fehler anzuzeigen

In der Richtlinie php_value error_reporting um alle Fehler anzuzeigen, die Sie angeben können -1 oder ~0 . Diese. die Zeilen sehen so aus:

PHP-Wert error_reporting -1 PHP-Wert error_reporting ~0

Darüber hinaus gilt die zweite Methode als korrekter, nämlich die Verwendung ~0 .

Vordefinierte Konstanten und bitweise Operationen error_reporting

  • Vordefinierte Konstanten
  • Bitweise Operatoren

Wenn wir beispielsweise NUR die folgenden Fehler E_ERROR (Wert 1), E_WARNING (Wert 2), E_CORE_ERROR (Wert 16) aufzeichnen möchten, müssten wir diese Werte in Binärzahlen umwandeln, um den entsprechenden numerischen Wert zu erhalten Führen Sie die entsprechenden bitweisen Operationen aus und konvertieren Sie dann die resultierende Binärzahl in eine Dezimalzahl. Dieser Vorgang kann jedoch vereinfacht werden – addieren Sie einfach die Werte der Dezimalzahlen. Diese. in unserem Fall ist es 1+2+16=19

PHP_value error_reporting 19

zeigt die Fehler E_ERROR, E_WARNING und E_CORE_ERROR an.

Ein Beispiel für einen absoluten Pfad zu einer Protokolldatei auf Hostland-Hosting (für die php_value error_log-Direktive)

/home/host900456/site/blogs/htdocs/www/PHP_errors.log

Anstatt host900456 Sie müssen Ihr Konto angeben.

Anstatt Webseite Sie müssen Ihre Domain angeben.

Übrigens gutes Hosting, auf dem genau diese Seite läuft. Wir empfehlen!

Der Faktor der Serverauslastung ist einer der Parameter von SaaS-Konten. Jeder Tarifplan hat seine eigenen Lastparameter. Die aktuelle Kontoauslastung können Sie jederzeit in Ihrem persönlichen Konto im CRM-System einsehen.

Manchmal kann es vorkommen, dass das von Ihnen verwendete Konto eine höhere Belastung erzeugt, als in Ihrem Tarifplan zulässig ist. Hierüber werden Sie durch ein entsprechendes Schreiben informiert.

Hauptparameter, die die Belastung beeinflussen:

  • Die Anzahl der Benutzer im System, die gleichzeitig arbeiten;
  • Anzahl der Datensätze in Programmtabellen;
  • Anzahl der Regeln und Zugriffsgruppen;
  • Anzahl der Erinnerungen, Farbformatierung, Filter usw.;
  • Anzahl der Berechnungen und deren Komplexität;
  • Anzahl der im Hintergrund laufenden Jobs (über das Cron-System);
  • Anzahl gestarteter Mailings (E-Mail und SMS);
  • Anzahl der Berichte;
  • Programmprotokollvolumen.

Wenn daher einige Zugriffsgruppen, Farbformatierungen, Filter und andere Konfigurationselemente nicht verwendet werden, ist es ratsam, sie zu löschen. Sie können auch unnötige Datensätze aus Tabellen entfernen. Zusätzlich zum Entfernen von Konfigurationselementen können Sie weitere Maßnahmen ergreifen, um die Belastung des Servers zu verringern. Auf sie wird weiter unten noch näher eingegangen.

Alle Maßnahmen zur Reduzierung der Belastung lassen sich in zwei Teile unterteilen: für Administratoren und für Entwickler. Durch diese Maßnahmen kann auch die Belastung des Servers bei Nutzung der Webversion des Programms reduziert werden.

Anleitung für Administratoren

Beginn der Optimierung

Als allererstes sollten Sie sicherstellen, dass Sie die neueste Version des Programms verwenden. Sie können dies überprüfen, indem Sie zu „Einstellungen“ – „Erweitert“ – „Revisionsaktualisierung“ gehen. Wenn Sie die neueste Version und Revision des Programms verwenden, wird Ihnen eine entsprechende Meldung angezeigt

Wenn Sie eine alte Version oder Revision verwenden, werden Sie vom Programm zur Aktualisierung aufgefordert.

Als nächstes sollten Sie einen erweiterten Systemscan durchführen. Gehen Sie dazu zu „Einstellungen“ – „Erweitert“ – „Systemscan“ und klicken Sie auf die Schaltfläche „Erweiterter Systemscan“. Sollten Fehler im Programm auftreten, werden diese automatisch korrigiert.

Allgemeine Programmeinstellungen

Gehen Sie zu „Einstellungen“ – „Erweitert“ – „Allgemeine Einstellungen“. Hier gibt es zwei Punkte, die es zu beachten gilt.

Intuitive Suche – Sie können diese Option deaktivieren, wenn Sie nicht nach der Transliteration der Bedeutung suchen müssen.

Fenster-Bildlaufmodus – Weitere Informationen zu Fenster-Bildlaufmodi finden Sie in unserer Dokumentation. Es empfiehlt sich, diese Einstellung auf „Einfach“ zu setzen.

Cron-Einstellungen

Gehen Sie zu „Einstellungen“ – „Erweitert“ – „Cron-Einstellungen“. In den Cron-Einstellungen können Sie Aufgaben verwalten, die automatisch im Hintergrund ausgeführt werden. Zum Beispiel Synchronisierung, Versenden von Briefen und SMS. Durch diese Einstellung gibt es zwei Möglichkeiten, die Belastung zu reduzieren.

1. Verbieten Sie die Ausführung von Aufgaben, die Sie in Ihrem Programm nicht verwenden. Dies können Sie tun, indem Sie die gewünschte Aufgabe öffnen und das Kontrollkästchen „Ausführung verbieten“ aktivieren.

Wenn Sie beispielsweise die Synchronisierungsfunktion nicht nutzen, öffnen Sie die entsprechende Aufgabe und aktivieren Sie in ihren Einstellungen das Kontrollkästchen „Ausführung verbieten“. Wenn Sie die SMS-Versandfunktion nicht nutzen, können Sie die Ausführung der Aufgaben „SMS generieren“, „SMS senden“, „Status der SMS-Zustellung prüfen“ verbieten.

2. Ändern Sie die Häufigkeit der Aufgaben. Gehen Sie dazu zu den Aufgabeneinstellungen und ändern Sie den Wert im Feld „Zeitraum“. Beispielsweise können Sie bei der Aufgabe „Briefe versenden“ festlegen, dass die Aufgabe statt jede Minute einmal alle 5 Minuten ausgeführt werden soll.

Berechnungsbedingungen einrichten

CRM-Software verwendet Berechnungen, um einige Felder automatisch auszufüllen. Doch manchmal sind die Bedingungen für ihre Umsetzung nicht optimal. Die Belastung wird beispielsweise durch die Feldanzeigebedingung in den Berechnungseinstellungen verursacht. Der Einsatz sollte vermieden werden.

Wenn wir beispielsweise eine Berechnung haben, bei der die Summe der Felder B und C in Feld A eingetragen wird, dann empfiehlt es sich, die Bedingungen „Feld B ändern“ und „Feld C ändern“ zu verwenden. Wenn wir eine Berechnung haben, die in Feld A einen Wert aus einer anderen Tabelle aus Feld B einträgt, abhängig vom Wert im Verknüpfungsfeld B, dann ist es logisch, dass wir nur die Bedingungen „Feld B ändern“ und „In Tabelle speichern“ verwenden können .

Protokolle einrichten und archivieren

Gehen Sie zu „Einstellungen“ – „Protokolle“ – „Protokolleinstellungen“. In den Protokolleinstellungen sollten Sie die Protokollierung der Benutzeransicht von Tabellen, Ansichten und Datensätzen nicht unnötigerweise aktivieren. Dies kann sowohl die Belastung des Servers erhöhen als auch dazu führen, dass die Protokolldatei zu groß wird. Es lohnt sich auch, hier die Option „Monatliches Archivierungsprotokoll“ zu aktivieren, mit der Sie die Größe der Tabelle mit monatlichen Protokollen automatisch reduzieren können

Sie können Protokolle hier auch automatisch archivieren, wenn die automatische Archivierung zuvor nicht aktiviert war. Dies kann im Reiter „Archiv“ erfolgen.

Filter einrichten

Wenn Sie die Einstellungen eines beliebigen Filters öffnen, sehen Sie die Option „Anzahl der Datensätze in Klammern anzeigen“. Es empfiehlt sich, dieses Kästchen zu deaktivieren, weil... Diese Option kann bei jedem Öffnen der Tabelle zu einer Belastung führen. Und je mehr solcher Filter in der Tabelle enthalten sind, desto größer ist die Belastung beim Öffnen.

Anleitung für Entwickler

Arbeiten mit der performance_stat-Tabelle

Wichtig:Änderungen an Datenbanktabellen können dazu führen, dass das Programm nicht mehr funktioniert. Sie sollten keine Änderungen an Datenbanktabellen vornehmen, es sei denn, dies ist unbedingt erforderlich.

Melden Sie sich bei Ihrem Konto an und öffnen Sie die Adresse https://*Ihre Kontoadresse*/edit_sql.php (wobei anstelle von *Ihre Kontoadresse* den entsprechenden Wert eingeben). Gehen Sie im sich öffnenden Fenster zur Datenbanktabelle, die den Namen Ihres Kontos enthält (z. B. c_myaccount). Öffnen Sie in der Liste der Datenbanktabellen, die geöffnet wird, die Tabelle f_performance_stat

Diese Tabelle verfolgt alle Programmskripte der letzten Stunde. Zunächst sollten Sie alle Skripte in dieser Tabelle nach der Anzahl der SQL-Abfragen sortieren (von den meisten bis zu den wenigsten). Doppelklicken Sie dazu auf den Header „sql_count“.

Sobald die Daten sortiert sind, kann die Datenanalyse beginnen. Bei der Analyse sollten Sie auf zwei Spalten achten

1. Skript – gibt den Namen des Skripts an, das die Last erzeugt

2. get_data – liefert detailliertere Informationen über das Skript oder enthält einen Link zu der Tabelle/Aufgabe, in der der Ladevorgang erfolgt.

Zur einfacheren Analyse verwenden Sie die folgende Tabelle:

Wert im Feld „Skript“. Beispielwert im Feld „get_data“. Beschreibung Maßnahmen zur Reduzierung der Belastung
cron.php ...&task_id=1 Eine solche Zeile bedeutet, dass die Last von einem der Cron-Jobs bereitgestellt wird
Sie müssen zu „Cron-Einstellungen“ gehen und den Job öffnen, der den Ladevorgang verursacht (die Job-ID wird im Feld „get_data“ angezeigt). Es lohnt sich, entweder den Jobcode zu optimieren oder seine Häufigkeit zu reduzieren. Über Cron-Einstellungen.
view_line2.php Tabelle=42&Zeile=1&Filter=48&Seite=1 Eine Zeile dieses Typs bedeutet, dass beim Betrachten eines Datensatzes die Belastung durch eine oder mehrere Berechnungen in einer bestimmten Tabelle angegeben wird
Felder.php Tabelle=42&Filter=48 Eine Zeile dieses Typs bedeutet, dass die Last durch eine oder mehrere Berechnungen in einer bestimmten Tabelle beim Betrachten der Tabelle angegeben wird Sie müssen zu den Berechnungseinstellungen der im Feld „get_data“ angegebenen Tabelle gehen (im Beispiel ist dies die Tabelle mit der ID 42). Zunächst lohnt es sich, die Bedingungen für die Durchführung von Berechnungen in der angegebenen Tabelle zu prüfen und zu optimieren. Wenn dies nicht hilft, lohnt es sich, den Berechnungscode selbst zu optimieren.
report.php ID=30 Eine solche Zeile bedeutet, dass die Last von einem der Programmberichte bereitgestellt wird
Es ist notwendig, den Code des im Feld „get_data“ angegebenen Berichts zu optimieren (im Beispiel handelt es sich um einen Bericht mit der ID 30).

Der Artikel beschreibt die in PHP (relevant für 5.3.x) verfügbare Funktionalität zur Behandlung von Fehlern aller Art, einschließlich Code-Interpretationsfehlern (E_ERROR, E_PARSE, E_WARNING usw.). Diese Verarbeitung hilft Ihnen, die Seite kontrolliert anzuzeigen, falls solche Probleme auftreten. Der Artikel enthält viele Beschreibungen und Arbeitsbeispiele (Architektur) zur sofortigen Verwendung in Ihrem Softwareprodukt. Am Ende war die Seite ein wenig kaputt, nun, es ist notwendig, die Suchmaschine mit der Überschrift 4xx oder 5xx darüber zu informieren und den Benutzer zu amüsieren, anstatt einen weißen Bildschirm (oder schlimmer noch, einen Bildschirm mit heiligen Informationen, z. B.) zurückzugeben Hacker) mit der Antwort 200 Ok.

Die Idee, dieses Thema zu schreiben, entstand, als ich mutig zwei Fragen stellte:

  • Frage über
  • Frage über
Durch mein Karma und das Hinzufügen zu Favoriten wurde mir klar, dass sie für die PHP-Habra-Community interessant waren. Aus diesem Grund habe ich beschlossen, die Lösungen zu diesen Problemen in Form eines Artikels zu formalisieren, damit es für Menschen und Suchmaschinen einfacher und umfassender wird, die benötigten Informationen zu finden.

Bei Interesse finden Sie die Details unter dem Schnitt...

Gründe für die Verwendung

Der Benutzer/die Suchmaschine benötigt eine klare Antwort, dass auf dem Server ein Problem vorliegt. Ohne ein bestimmtes Feng Shui ist dies ziemlich schwierig und manchmal sogar unmöglich. Hier erkläre ich das alles und hinterlasse auch eine Notiz für mich selbst, da ich vor einer Woche nicht wusste, was ich tun soll, und wahrscheinlich werden auch viele Anfänger entmutigt sein.

Funktionsbeschreibungen

Diese Funktionalität ist in PHP verfügbar, um Fehler zu behandeln und die Ausgabe zu steuern. Hier finden Sie eine Beschreibung ihrer Vorzüge und Mängel. Ich werde keine Dokumentation zur Verfügung stellen, sondern lediglich auf deren Seiten verweisen und meine Meinung darlegen. Es wird nur ein kleiner Teil angegeben; ich werde am Ende des Artikels Links zu den relevanten Abschnitten der Dokumentation bereitstellen. Also treffen wir uns:

- Kontrolle unkritischer Fehler: Kommentare, Warnungen, Benutzerfehler. Im Allgemeinen alles, was die Interpretation nicht abnormal beendet.
set_error_handler – Legt einen benutzerdefinierten Fehlerhandler fest.
Es ist erforderlich, alle derartigen Fehler in das Protokoll zu schreiben. Wenn Sie es nicht festlegen, wird es nicht in das Protokoll geschrieben. Ich möchte jedoch immer wissen, in welchen Kampfsituationen Kommentare und Warnungen ausgelöst werden können. Das heißt, es ermöglicht dem Benutzer, das Produkt automatisch zu testen, ohne dass er es bemerkt.
Wenn die Funktion nicht angegeben ist, versucht PHP nur, Daten auf dem Bildschirm anzuzeigen. Wenn dies nicht angegeben ist, entstehen bei solchen Fehlern überhaupt keine Lebenszeichen.

- Kontrolle, Ausnahmen: ist ein Fehler vom Typ E_ERROR.
set_Exception_handler – Legt einen benutzerdefinierten Ausnahmehandler fest
Nun, ich weiß nicht, warum das überhaupt erfunden wurde, wenn es doch um das geht, was unten beschrieben wird, und einfach um die Behandlung eines Fehlers vom Typ Exception. Ich sage Ihnen also, dass es einfach existiert. Es fängt den kritischen Ausnahmefehler ab und ermöglicht Ihnen, etwas dagegen zu unternehmen. In jedem Fall endet das Skript. Für mich persönlich reicht der Standardbetrieb aus (schreibt in Protokolle, versucht anzuzeigen). Ich würde es überhaupt nicht neu definieren, sonst müsste ich selbst über die Ausnahme schreiben, die in den Protokollen aufgetreten ist.

- Ausgangssteuerfunktionen: Hier beschreibe ich 3 Funktionen, die Sie aus unterschiedlichen Gründen kennen sollten. Zum Beispiel für oder bei Header-Ausgabeproblemen. In unserem Fall müssen wir Fehlerheader anzeigen.

Bedingungen
Es gibt eine Datei mit Code, der zuerst oder vor dem Code ausgeführt wird, in dem ein Fehler auftreten kann, und diese Datei und alle Dateien davor sind zu 100 % debuggt, sodass kein Fehler auftritt. Dies ist die Bedingung, die es einfacher machen würde – ohne Fehler, bis alle Registrierungen der oben genannten Funktionen abgeschlossen sind. In dieser Datei werden diese Fehlerkontrolltechniken ausführlich beschrieben. Der Puffer wird überwacht; wenn ein Fehler vorliegt, wird der Puffer zurückgesetzt und ein Fehler angezeigt.
Code mit Kommentaren
Ich möchte selbst hinzufügen, dass ich den Code nicht getestet habe, da es sich um ein vereinfachtes Diagramm dessen handelt, was ich im Code habe. Kommentare sind willkommen
mob_info