tag:forum.selfhtml.org,2005:/self Fehlermeldung unterdrücken – SELFHTML-Forum 2018-10-20T16:04:11Z https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734688#m1734688 Lothar 2018-10-20T12:21:36Z 2018-10-20T12:21:36Z Fehlermeldung unterdrücken <p>Hi, (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist? Danke Lothar</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734689#m1734689 Tabellenkalk 2018-10-20T12:37:23Z 2018-10-20T12:37:23Z Fehlermeldung unterdrücken <p>Hallo,</p> <blockquote> <p>(wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?</p> </blockquote> <p>indem du <code>include_once</code> verwendest, dann gibts nur eine Warnung.</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734690#m1734690 ursus contionabundo 2018-10-20T12:39:23Z 2018-10-20T12:54:08Z Fehlermeldung unterdrücken <blockquote> <p>Hi, (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?</p> </blockquote> <pre><code class="block language-php"><span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">is_file</span><span class="token punctuation">(</span> <span class="token variable">$file</span> <span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token function">is_readable</span><span class="token punctuation">(</span> <span class="token variable">$file</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">require_once</span><span class="token punctuation">(</span> <span class="token variable">$file</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Das ist aber blöd, denn dann stellt sich die Frage warum in aller Welt <a href="http://php.net/manual/de/function.require-once.php" rel="noopener noreferrer">require_once</a> und nicht <a href="http://php.net/manual/de/function.include-once.php" rel="noopener noreferrer">include_once</a> verwendet werden soll?</p> <p>Die bei Verwendung von <a href="http://php.net/manual/de/function.include-once.php" rel="noopener noreferrer">include_once</a> im Fehlerfall fällige Warnung könnte man mit <a href="http://php.net/manual/de/function.error-reporting.php" rel="noopener noreferrer">error_reporting( E_ALL & ~E_WARNING )</a> unterdrücken.</p> <p>Willst Du aber den Fehler (der ja keiner sein soll) abfangen und selbst reagieren, dann gehe entweder wie oben vor (da musst Du selbst an alles denken) oder probiere <a href="http://php.net/manual/de/language.exceptions.php" rel="noopener noreferrer">try … catch</a></p> <pre><code class="block language-php"><span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">require_once</span><span class="token punctuation">(</span> <span class="token variable">$file</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> <span class="token variable">$e</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Exception abgefangen: '</span><span class="token punctuation">,</span> <span class="token variable">$e</span><span class="token operator">-></span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"\n"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p><strong>Eine Frage bleibt noch:</strong> Willst Du nicht vielleicht lieber <a href="http://php.net/manual/de/function.readfile.php" rel="noopener noreferrer">readfile( $file )</a>? Erwartest Du denn PHP in der zu inkludierenden Datei? <a href="https://www.heise.de/newsticker/meldung/Domainfactory-Hack-Forum-ist-unsicher-Fragen-bleiben-unbeantwortet-4191628.html" rel="nofollow noopener noreferrer">Falls nicht kann Dein Vorhaben in einer Katastrophe enden</a>.</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734691#m1734691 Matthias Apsel matthias.apsel@selfhtml.org https://brückentage.info 2018-10-20T12:40:28Z 2018-10-20T12:40:28Z Fehlermeldung unterdrücken <p>Hallo Lothar,</p> <blockquote> <p>(wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?</p> </blockquote> <p>Mit <code class="language-php"><span class="token function">error_reporting</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code> kannst du die Fehlermeldungen komplett abschalten. Bei Verzicht auf <code class="language-php"><span class="token keyword">require_once</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"nicht_vorhandene_Datei"</span><span class="token punctuation">)</span></code> gibt es die Fehlermeldung natürlich auch nicht.</p> <p>Vielleicht solltest du etwas mehr mitteilen.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Pantoffeltierchen haben keine Hobbys. </div> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734694#m1734694 TS ts-self@online.de https://bitworks.de 2018-10-20T13:00:46Z 2018-10-20T13:00:46Z Fehlermeldung unterdrücken <p>Hello,</p> <blockquote> <p>(wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?</p> </blockquote> <p>Das solltest Du gar nicht erst versuchen. Denn mit Require(_Once) werden nur Dateien eingebunden, die zwingend erforderlich sind.</p> <p>Du kannst aber vorher nachschauen, ob <a href="http://php.net/manual/en/function.file-exists.php" rel="noopener noreferrer">es die Datei gibt</a> und ob dein Script <a href="http://php.net/manual/en/function.is-readable.php" rel="noopener noreferrer">sie lesen darf</a>. Das ist dann zwar nicht atomar (die Datei könnte wenige Millisekunden später schon nicht mehr lesbar sein), aber für die Praxis ist es meistens hinreichend, weil Das Script ja bei include_once() spätestens abbrechen würde, wenn die Verhältnisse sich verschlechtert haben.</p> <p>Glück Auf<br> Tom vom Berg</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn.<br> </div> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734692#m1734692 Tabellenkalk 2018-10-20T12:45:47Z 2018-10-20T12:45:47Z Fehlermeldung unterdrücken <p>Hallo,</p> <blockquote> <p>Verzicht auf <code class="language-php"><span class="token keyword">require_once</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"nicht_vorhandene_Datei"</span><span class="token punctuation">)</span></code></p> </blockquote> <p>finde ich jetzt die schönste Lösung… (+1)</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734697#m1734697 TS ts-self@online.de https://bitworks.de 2018-10-20T13:04:02Z 2018-10-20T13:04:02Z Fehlermeldung unterdrücken <p>Hello,</p> <blockquote> <blockquote> <p>(wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?</p> </blockquote> <p>Mit <code class="language-php"><span class="token function">error_reporting</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code> kannst du die Fehlermeldungen komplett abschalten. Bei Verzicht auf <code class="language-php"><span class="token keyword">require_once</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"nicht_vorhandene_Datei"</span><span class="token punctuation">)</span></code> gibt es die Fehlermeldung natürlich auch nicht.</p> </blockquote> <p>Fehlermeldungen und Fehlerreaktionen in PHP komplett abzuschalten ist die schlechteste Idee, die ich in diesem Zusammenhang jemals gelesen habe ;-P</p> <p>Bitte nimm den Vorschlag zurück.</p> <p>Glück Auf<br> Tom vom Berg</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn.<br> </div> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734693#m1734693 ursus contionabundo 2018-10-20T12:58:13Z 2018-10-20T12:58:13Z Fehlermeldung unterdrücken <blockquote> <p>finde ich jetzt die schönste Lösung…</p> </blockquote> <p>Die kann aber in Abhängigkeit von der (bestenfalls bruchstückhaft bekannten) Aufgabe immer noch falsch sein. Wenn der TO schon require_once und include_once nicht wirklich kennt, <a href="https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734690#m1734690" rel="noopener noreferrer">kann readfile() sehr geeigneter sein</a>.</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734695#m1734695 Tabellenkalk 2018-10-20T13:00:57Z 2018-10-20T13:00:57Z Fehlermeldung unterdrücken <p>Hallo,</p> <blockquote> <blockquote> <p>schönste Lösung…</p> </blockquote> <p>noch falsch sein.</p> </blockquote> <p>schön und falsch schließt sich ja nicht gegenseitig aus...</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734696#m1734696 ursus contionabundo 2018-10-20T13:03:52Z 2018-10-20T13:04:39Z Fehlermeldung unterdrücken <p>Zudem folgt auf require_once im Fehlerfall stets (sofern nicht mit try … catch abgefangen) ein PROGRAMMABRUCH. <a href="https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734691#m1734691" rel="noopener noreferrer">Die Warnung oder den Fehler mittels error_reporting(0) nicht anzuzeigen</a> ist bei aller Schönheit "eher nicht hilfreich".</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734698#m1734698 Tabellenkalk 2018-10-20T13:06:14Z 2018-10-20T13:06:14Z Fehlermeldung unterdrücken <p>Hallo,</p> <blockquote> <p>"eher nicht hilfreich".</p> </blockquote> <p>bitte lies genauer. Ich bezog mich explizit <em>nicht</em> auf das error-reporting.</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734705#m1734705 Matthias Apsel matthias.apsel@selfhtml.org https://brückentage.info 2018-10-20T16:04:11Z 2018-10-20T16:04:11Z Fehlermeldung unterdrücken <p>Hallo TS,</p> <blockquote> <blockquote> <blockquote> <p>(wie) kann ich die Fehlermeldung unterdrücken […]?</p> </blockquote> <p>Mit <code class="language-php"><span class="token function">error_reporting</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code> kannst du die Fehlermeldungen komplett abschalten. Fehlermeldungen und Fehlerreaktionen in PHP komplett abzuschalten ist die schlechteste Idee, die ich in diesem Zusammenhang jemals gelesen habe ;-P</p> </blockquote> </blockquote> <p>Ja. Ebenso wie der Wunsch, die Fehlermeldung zu unterdrücken.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Pantoffeltierchen haben keine Hobbys. </div> https://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734699#m1734699 ursus contionabundo 2018-10-20T13:19:12Z 2018-10-20T13:25:54Z Vollständige Lösung? <blockquote> <p>Ich bezog mich explizit nicht auf das error-reporting.</p> </blockquote> <p>Das ist mir klar. Das stand aber in der gelobten Antwort halt mit drin.</p> <p>Ich denke, die umfassendste Antwort ist:</p> <pre><code class="block language-php"><span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token comment">### Wenn PHP in $file erwartet wird und "abgearbeitet" werden soll:</span> <span class="token comment">## Falls Datei sonst womöglich mehrfach geöffnet wird:</span> <span class="token comment"># require_once( $file ); </span> <span class="token comment">## Falls Datei NICHT womöglich mehrfach geöffnet wird: </span> <span class="token comment"># require( $file ); </span> <span class="token comment">### Falls Inhalt nur ausgegeben werden soll: </span> <span class="token function">readfile</span><span class="token punctuation">(</span> <span class="token variable">$file</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token class-name type-declaration">Exception</span> <span class="token variable">$e</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Exception abgefangen: '</span><span class="token punctuation">,</span> <span class="token variable">$e</span><span class="token operator">-></span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"\n"</span><span class="token punctuation">;</span> <span class="token comment"># (oder was auch immer geschehen soll.)</span> <span class="token punctuation">}</span> </code></pre> <p>Die löst auch das Problem, dass die Datei womöglich in der Tausenstelsekunde zwischen is_file() && is_readable() und dem Leseversuch gelöscht wird.</p>