tag:forum.selfhtml.org,2005:/selfFehlermeldung unterdrücken – SELFHTML-Forum2018-10-20T16:04:11Zhttps://forum.selfhtml.org/self/2018/oct/20/fehlermeldung-unterdruecken/1734688#m1734688Lothar2018-10-20T12:21:36Z2018-10-20T12:21:36ZFehlermeldung 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#m1734689Tabellenkalk2018-10-20T12:37:23Z2018-10-20T12:37:23ZFehlermeldung 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#m1734690ursus contionabundo2018-10-20T12:39:23Z2018-10-20T12:54:08ZFehlermeldung 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#m1734691Matthias Apselmatthias.apsel@selfhtml.orghttps://brückentage.info2018-10-20T12:40:28Z2018-10-20T12:40:28ZFehlermeldung 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#m1734694TSts-self@online.dehttps://bitworks.de2018-10-20T13:00:46Z2018-10-20T13:00:46ZFehlermeldung 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#m1734692Tabellenkalk2018-10-20T12:45:47Z2018-10-20T12:45:47ZFehlermeldung 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#m1734697TSts-self@online.dehttps://bitworks.de2018-10-20T13:04:02Z2018-10-20T13:04:02ZFehlermeldung 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#m1734693ursus contionabundo2018-10-20T12:58:13Z2018-10-20T12:58:13ZFehlermeldung 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#m1734695Tabellenkalk2018-10-20T13:00:57Z2018-10-20T13:00:57ZFehlermeldung 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#m1734696ursus contionabundo2018-10-20T13:03:52Z2018-10-20T13:04:39ZFehlermeldung 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#m1734698Tabellenkalk2018-10-20T13:06:14Z2018-10-20T13:06:14ZFehlermeldung 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#m1734705Matthias Apselmatthias.apsel@selfhtml.orghttps://brückentage.info2018-10-20T16:04:11Z2018-10-20T16:04:11ZFehlermeldung 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#m1734699ursus contionabundo2018-10-20T13:19:12Z2018-10-20T13:25:54ZVollstä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>