tag:forum.selfhtml.org,2005:/self Webseite erreichbar, überprüfen! – SELFHTML-Forum 2022-02-07T10:37:03Z https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795927?srt=yes#m1795927 Michi 2022-02-05T10:57:53Z 2022-02-05T10:57:53Z Webseite erreichbar, überprüfen! <p>Hallo, ich halte mich mal kurz und bündig.</p> <p>Mit welchen PHP Befehl, kann ich die Existenz einer Webseite abfragen?</p> <p>Also ob sie erreichbar ist, oder nicht?</p> <p>Muss ich sie erst mit file_get_contents einlesen? Oder habe ich irgendwie die Möglichkeit, es einfach zu machen? Ich möchte nur abfragen ob sie erreichbar ist.</p> <p>Gruß</p> <p>Michi</p> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795928?srt=yes#m1795928 TS ts-self@online.de https://bitworks.de 2022-02-05T11:09:57Z 2022-02-05T11:37:18Z Webseite erreichbar, überprüfen! <p>Hello,</p> <p>Dafür benötigst Du einen Head-Request.</p> <p>Das Ganze ist aber im Prinzip zweistufig. Zuerst muss man einen Socket zum entfernten Server aufbauen. Und dann kann man den eigentlichen HTTP/s-HEAD-Request ausführen.</p> <p>Der zurückgelieferte Status gibt dann Auskunft über den Erfolg, oder ob die Webseite woanders liegt, usw.</p> <p>Socket aufbauen mit <a href="https://www.php.net/manual/en/function.fsockopen" rel="nofollow noopener noreferrer">fsockopen()</a>. Dort findest Du auch Beispiele.</p> <p>Mit <a href="https://www.php.net/manual/en/function.file-get-contents" rel="nofollow noopener noreferrer">file_get_contents()</a> geht das auch in einem Schritt. Du musst ja nur ein Byte <s>der Datei</s> des Dokumentes (Ressource) anfordern. Dann bekommst Du bei Erfolg die Header und das eine Byte.</p> <p>Das hat aber zwei Pferdefüße.</p> <ul> <li>Die Wrapper für HTTP/s und file_get_contents müssen erlaubt sein.</li> <li>Dir geht die genaue Information verloren, in welcher Stufe ggf. ein Fehler (z. B: Timeout) aufgetreten ist, also ob der Host nicht erreichbar war, oder der HTTP-Server, oder die Ressource selbst.</li> <li>Du kannst die Timeouts nicht explizit setzen, wobei es da für file_get_contents() einen "Konext-Parameter" gibt. Der ist aber nur umständlich zu erstellen.</li> </ul> <p>Im <a href="https://forum.selfhtml.org/self/2017/jan/11/php-url-open/1684209#m1684209" rel="noopener noreferrer">Archiv </a>findest Du auch ein paar tiefergehende Gedanken dazu. Da war wohl noch ein Schönheitsfehler drin, aber den findest Du bestimmt :-)<br> Es gibt aber auch irgendwo eine überarbeitete Version mit substantiierten Fehlermeldung und auch für HTTPS, bzw, andere Ports als 80. Finde ich aber jetzt nicht.</p> <p>Das Prinzip sollte Dir aber klar werden können.</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. </div> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795929?srt=yes#m1795929 Mitleser 2.0 2022-02-05T13:21:20Z 2022-02-05T13:21:20Z Webseite erreichbar, überprüfen! <blockquote> <p>Mit welchen PHP Befehl, kann ich die Existenz einer Webseite abfragen? Also ob sie erreichbar ist, oder nicht?</p> </blockquote> <p>Bin zwar PHP-Laie, aber denke CURL ist für diesen Zweck völlig ausreichend und würde es mir sparen wollen, hierfür einen eigenen Socket aufzusetzen.</p> <p><a href="https://gist.github.com/lixingcong/878a179bf1dce183b194a63135d104c8" rel="nofollow noopener noreferrer">Beispiel, via Suchmaschine gefunden</a>.</p> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795930?srt=yes#m1795930 Raktenwilli 2022-02-05T13:22:39Z 2022-02-05T13:52:35Z Webseite erreichbar, überprüfen mit cUrl <p>Wie schon von TS beschrieben wäre es ein „ressourcenschonender“ Weg, eine HEAD-Abfrage zu machen.</p> <p>Da Du aber binnen „nullkommafastnichts“ ohnehin auf die Idee kommen wirst, weitere Informationen erlangen zu wollen, empfehle ich Dir cUrl zu verwenden. Das geht etwa so:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$dst_url</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://www.example.com'</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Content-Type text/plain'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">error_reporting</span><span class="token punctuation">(</span> <span class="token constant">E_ALL</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">ini_set</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'display_errors'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$ch</span> <span class="token operator">=</span> <span class="token function">curl_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span> <span class="token variable">$dst_url</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_RETURNTRANSFER</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_CUSTOMREQUEST</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'HEAD'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_NOBODY</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">curl_exec</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token function">curl_getinfo</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Ausgaben:</p> <pre><code class="block">Array ( [url] => https://www.example.com/ [content_type] => text/html; charset=UTF-8 [http_code] => 200 [header_size] => 352 [request_size] => 53 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.589923 [namelookup_time] => 0.001856 [connect_time] => 0.145835 [pretransfer_time] => 0.446154 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => 648 [upload_content_length] => -1 [starttransfer_time] => 0.589903 [redirect_time] => 0 [redirect_url] => [primary_ip] => 93.184.216.34 [certinfo] => Array ( ) [primary_port] => 443 [local_ip] => 192.168.1.2 [local_port] => 41472 [http_version] => 3 [protocol] => 2 [ssl_verifyresult] => 0 [scheme] => HTTPS [appconnect_time_us] => 446046 [connect_time_us] => 145835 [namelookup_time_us] => 1856 [pretransfer_time_us] => 446154 [redirect_time_us] => 0 [starttransfer_time_us] => 589903 [total_time_us] => 589923 ) </code></pre> <p>Ich denke damit hast Du einen guten Startpunkt für weitere Überlegungen und Planungen - z.B. hinsichtlich der Frage, welche Informationen Du wie weiterverarbeiten willst. Wenn z.B. keine "primary_ip" geliefert wird hast Du einen DNS-Fehler, den Du weiter untersuchen musst bzw. kannst. Im Erfolgsfall könnten Dich die Zeitangaben interessieren…</p> <p>Mehr Informationen (z.B. Erklärungen zu den Items des Arrays) findest Du im <a href="https://www.php.net/manual/de/function.curl-getinfo.php" rel="nofollow noopener noreferrer">PHP-Handbuch, hier mal ab curl_getinfo()</a>.</p> <p>Vorteil: <a href="https://de.wikipedia.org/wiki/CURL" rel="nofollow noopener noreferrer">cURL gibt es auch in zahlreichen weiteren Programmsprachen</a>, sogar als eigenständiges Programm. Ich würde erwarten, dass jeder Hoster das entsprechende PHP-Modul installiert hat.</p> <p>Falls Du (was ich für einen Fehler halte) eine Testumgebung unter Windows benutzt (also Dein PHP unter Windows läuft <a href="https://www.php.net/manual/de/curl.installation.php" rel="nofollow noopener noreferrer">solltest Du die Hinweise zur Installation lesen</a>.</p> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795932?srt=yes#m1795932 TS ts-self@online.de https://bitworks.de 2022-02-05T14:15:37Z 2022-02-05T14:15:37Z Webseite erreichbar, überprüfen! <p>Hello,</p> <p>klingt fast genauso bequem, wie file_get_contents().</p> <p>Ist cURL innerhalb PHP auch so leisgtungsstark, wie standalone?<br> Wie kommt man da an die Ergebnisse der einzelnen Stufen?</p> <p>Gelten für die PHP-cURL-Methoden auch die Einschränkungen der fopen-Wrapper, oder gibt es andere Restrictionen?</p> <blockquote> <blockquote> <p>Mit welchen PHP Befehl, kann ich die Existenz einer Webseite abfragen? Also ob sie erreichbar ist, oder nicht?</p> </blockquote> <p>Bin zwar PHP-Laie, aber denke CURL ist für diesen Zweck völlig ausreichend und würde es mir sparen wollen, hierfür einen eigenen Socket aufzusetzen.</p> <p><a href="https://gist.github.com/lixingcong/878a179bf1dce183b194a63135d104c8" rel="nofollow noopener noreferrer">Beispiel, via Suchmaschine gefunden</a>.</p> </blockquote> <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. </div> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795933?srt=yes#m1795933 Raktenwilli 2022-02-05T15:34:23Z 2022-02-05T15:36:56Z Webseite erreichbar, überprüfen! <blockquote> <p>Hello,</p> <p>klingt fast genauso bequem, wie file_get_contents().</p> <p>Ist cURL innerhalb PHP auch so leisgtungsstark, wie standalone?<br> Wie kommt man da an die Ergebnisse der einzelnen Stufen?</p> </blockquote> <p>Setze die Curl-Option <code>CURLOPT_VERBOSE</code> auf <code>true</code>:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$dst_url</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://www.example.com'</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Content-Type text/plain'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">error_reporting</span><span class="token punctuation">(</span> <span class="token constant">E_ALL</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">ini_set</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'display_errors'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$ch</span> <span class="token operator">=</span> <span class="token function">curl_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span> <span class="token variable">$dst_url</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_RETURNTRANSFER</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_CUSTOMREQUEST</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'HEAD'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_NOBODY</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### So geht das:###</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">curl_exec</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token function">curl_getinfo</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Die <strong>zusätzlichen</strong> Ausgaben sind dann:</p> <pre><code class="block">* Trying 77.1.64.9:443... * TCP_NODELAY set * Connected to home.fastix.org (77.1.64.9) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=code.fastix.org * start date: Dec 22 19:54:50 2021 GMT * expire date: Mar 22 19:54:49 2022 GMT * subjectAltName: host "home.fastix.org" matched cert's "home.fastix.org" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. > HEAD / HTTP/1.1 Host: home.fastix.org Accept: */* * old SSL session ID is stale, removing * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Sat, 05 Feb 2022 15:29:59 GMT < Server: Apache/2.4.52 < Last-Modified: Thu, 08 Oct 2020 07:41:54 GMT < ETag: "24f12-186-5b123f751f381" < Accept-Ranges: bytes < Content-Length: 390 < Vary: Accept-Encoding < Permissions-Policy: interest-cohort=() < Content-Type: text/html; charset=UTF-8 < * Connection #0 to host home.fastix.org left intact </code></pre> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795964?srt=yes#m1795964 Auge 2022-02-07T10:37:03Z 2022-02-07T10:37:03Z Webseite erreichbar, überprüfen! <p>Hallo</p> <blockquote> <p>Gelten für die PHP-cURL-Methoden auch die Einschränkungen der fopen-Wrapper, oder gibt es andere Restrictionen?</p> </blockquote> <p>Ob es die selben oder eigene Restriktionen sind, kann ich nicht sagen, aber ja, es gibt offensichtlich Möglichkeiten, die cURL-Bibliothek für PHP an Requests nach außen zu hindern. Ich bin jedenfalls mal einem Webhoster „begegnet“, bei dem die „üblichen“ PHP-Kanäle nach außen dicht waren (fopen-Wrapper und ähnliche) und bei dem sich dann herausgestellt hat, dass cURL und die dazugehörige PHP-Bibliothek zwar installiert waren, aber auch über diese <em>absolut kein Kontakt nach außen</em> möglich war.</p> <p>Da hätten die die Funktion auch gleich ganz weg lassen können.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> 200 ist das neue 35. </div> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795941?srt=yes#m1795941 TS ts-self@online.de https://bitworks.de 2022-02-06T10:17:00Z 2022-02-06T10:17:00Z Webseite erreichbar, überprüfen! <p>Hello,</p> <blockquote> <blockquote> <p>Ist cURL innerhalb PHP auch so leisgtungsstark, wie standalone?<br> Wie kommt man da an die Ergebnisse der einzelnen Stufen?</p> </blockquote> <p>Setze die Curl-Option <code>CURLOPT_VERBOSE</code> auf <code>true</code>:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$dst_url</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://www.example.com'</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Content-Type text/plain'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">error_reporting</span><span class="token punctuation">(</span> <span class="token constant">E_ALL</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">ini_set</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'display_errors'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$ch</span> <span class="token operator">=</span> <span class="token function">curl_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span> <span class="token variable">$dst_url</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_RETURNTRANSFER</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_CUSTOMREQUEST</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'HEAD'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_NOBODY</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### So geht das:###</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">curl_exec</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token function">curl_getinfo</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Die <strong>zusätzlichen</strong> Ausgaben sind dann:</p> <pre><code class="block">* Trying 77.1.64.9:443... * TCP_NODELAY set * Connected to home.fastix.org (77.1.64.9) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=code.fastix.org * start date: Dec 22 19:54:50 2021 GMT * expire date: Mar 22 19:54:49 2022 GMT * subjectAltName: host "home.fastix.org" matched cert's "home.fastix.org" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. > HEAD / HTTP/1.1 Host: home.fastix.org Accept: */* * old SSL session ID is stale, removing * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Sat, 05 Feb 2022 15:29:59 GMT < Server: Apache/2.4.52 < Last-Modified: Thu, 08 Oct 2020 07:41:54 GMT < ETag: "24f12-186-5b123f751f381" < Accept-Ranges: bytes < Content-Length: 390 < Vary: Accept-Encoding < Permissions-Policy: interest-cohort=() < Content-Type: text/html; charset=UTF-8 < * Connection #0 to host home.fastix.org left intact </code></pre> </blockquote> <p>Ich habe das jetzt leider noch nicht durchschaut.<br> Wo landet diese zusätzliche Auskunft dann?<br> Du hast die Aktivierung nach der Ausgabe mit <code>print_r();</code> durchgeführt.</p> <p>Kann ich die in PHP auffangen?</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. </div> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795942?srt=yes#m1795942 Raketenwilli 2022-02-06T11:16:33Z 2022-02-06T11:33:34Z Webseite erreichbar, überprüfen! <pre><code class="block language-php"><span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <blockquote> <p>Du hast die Aktivierung nach der Ausgabe mit <code>print_r();</code> durchgeführt.</p> </blockquote> <p>Editierungsfehler. Ich hatte die Zeile versehentlich zweimal eingefügt.</p> <blockquote> <p>Wo landet diese zusätzliche Auskunft dann?<br> Kann ich die in PHP auffangen?</p> </blockquote> <p>Das Handbuch sagt:</p> <p>„<em><strong>CURLOPT_VERBOSE</strong>: true, um ausführliche Informationen auszugeben, entweder nach STDERR oder in die mittels der Option <strong>CURLOPT_STDERR</strong> gewählte Datei.</em>“</p> <p><a href="https://www.php.net/manual/de/function.curl-setopt.php" rel="nofollow noopener noreferrer">https://www.php.net/manual/de/function.curl-setopt.php</a></p> <p>Das Handbuch ist da leider <em>„etwas undeutlich bis falsch“</em>: Erwartet wird nicht etwa ein Dateiname sondern eine „Stream-Ressource“, also etwas, was man in Perl einen „Filehandler“ nennen würde. Siehe also <code>fopen</code>, <code>tmpfile</code>, <code>fpassthru</code>, <code>fclose</code>, … - Das steht (soweit zum <em>„undeutlich“</em>) aber in einem Kasten an einer „entfernten Stelle“:</p> <p><em>“Für die folgenden option-Parameter sollte value eine Stream-Resource sein, so wie sie z. B. mittels fopen() erstellt werden kann“</em></p> <p>(Falsch ist es aber auch: Es <strong>MUSS</strong> eine Stream-Resource sein.)</p> <p><strong>So. Wir wissen genug.</strong> Exekutieren wir das in dem wir die Daten, statt diese sofort in den Fehlerkanal auszugeben, in einer temporären Datei speichern (und diese nach Ausgabe löschen):</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$dst_url</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://www.example.com'</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Content-Type text/plain'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">error_reporting</span><span class="token punctuation">(</span> <span class="token constant">E_ALL</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">ini_set</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'display_errors'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$ch</span> <span class="token operator">=</span> <span class="token function">curl_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$tempfile</span> <span class="token operator">=</span> <span class="token function">tmpfile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### Erzeugen der temporären Datei</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span> <span class="token variable">$dst_url</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_RETURNTRANSFER</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_CUSTOMREQUEST</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'HEAD'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_NOBODY</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### So geht das:###</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_STDERR</span><span class="token punctuation">,</span> <span class="token variable">$tempfile</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">curl_exec</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Daten aus der temporären Datei:"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token function">fpassthru</span><span class="token punctuation">(</span> <span class="token variable">$tempfile</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### Das fclose löscht auch die temporäre Datei.</span> <span class="token comment">### Frühestmöglich ausführen. Grund im Handbuch:</span> <span class="token comment">### Wird das Skript unerwartet beendet,</span> <span class="token comment">### wird die temporäre Datei möglicherweise nicht gelöscht. </span> <span class="token function">fclose</span><span class="token punctuation">(</span> <span class="token variable">$tempfile</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"Gezeigt und gelöscht! Jetzt ..."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Daten von curl_getinfo:"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token function">curl_getinfo</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> </span></code></pre> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795944?srt=yes#m1795944 Raketenwilli 2022-02-06T12:32:57Z 2022-02-06T12:48:22Z Ausflug: Test mit Shell-Skript und wget. z.B. für cronjob <pre><code class="block bad language-bash"><span class="token shebang important">#!/bin/bash</span> <span class="token assign-left variable">SERVER</span><span class="token operator">=</span><span class="token variable">${2}</span> <span class="token comment">#SERVER='www.example.com/foo?bar#baz';</span> <span class="token assign-left variable">SERVER</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> <span class="token parameter variable">-n</span> $SERVER <span class="token operator">|</span> <span class="token function">sed</span> <span class="token parameter variable">-e</span> <span class="token string">'s/[/?&#].*$//'</span><span class="token variable">)</span></span><span class="token punctuation">;</span> <span class="token assign-left variable">PROTO</span><span class="token operator">=</span><span class="token variable">${1}</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$PROTO</span> <span class="token operator">!=</span> <span class="token string">'https'</span> <span class="token parameter variable">-a</span> <span class="token variable">$PROTO</span> <span class="token operator">!=</span> <span class="token string">'http'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token builtin class-name">echo</span> <span class="token string">"FEHLER: Falsches Protokoll."</span> <span class="token builtin class-name">exit</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token keyword">fi</span> <span class="token comment">#PROTO='https';</span> <span class="token comment"># echo $(wget -d --spider ${PROTO}://${SERVER}/ 2>&1 | grep 'HTTP.*[0-9][0-9][0-9]');</span> <span class="token assign-left variable">t</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token function">wget</span> <span class="token parameter variable">-d</span> <span class="token parameter variable">--spider</span> $<span class="token punctuation">{</span>PROTO<span class="token punctuation">}</span>://$<span class="token punctuation">{</span>SERVER<span class="token punctuation">}</span> <span class="token operator"><span class="token file-descriptor important">2</span>></span><span class="token file-descriptor important">&1</span> <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">'HTTP.*[0-9][0-9][0-9]'</span> <span class="token operator">|</span> <span class="token function">wc</span> <span class="token parameter variable">-l</span><span class="token variable">)</span></span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$t</span> <span class="token parameter variable">-eq</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token builtin class-name">echo</span> <span class="token string">"Erfolg: Der Server <span class="token entity" title="\"">\"</span><span class="token variable">${SERVER}</span><span class="token entity" title="\"">\"</span> ist via <span class="token entity" title="\"">\"</span><span class="token variable">${PROTO}</span><span class="token entity" title="\"">\"</span> erreichbar."</span><span class="token punctuation">;</span> <span class="token builtin class-name">exit</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token builtin class-name">echo</span> <span class="token string">"FEHLER: Der Server <span class="token entity" title="\"">\"</span><span class="token variable">${SERVER}</span><span class="token entity" title="\"">\"</span> ist via <span class="token entity" title="\"">\"</span><span class="token variable">${PROTO}</span><span class="token entity" title="\"">\"</span> NICHT erreichbar."</span><span class="token punctuation">;</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">fi</span> </code></pre> <p>Aufruf z.B. mit</p> <pre><code class="block">./test.sh https 'www.example.com/foo&bar=baz#tok' </code></pre> <p>Derlei könnte man <a href="https://linux.die.net/man/5/crontab" rel="nofollow noopener noreferrer">z.B. als Cronjob ausführen</a> und 'wegloggen' oder, im Falle eines Misserfolges, per Mail senden... Freilich bietet das noch viele schöne Möglichkeiten und <strong>SOLLS (deshalb habe ich das als „bad“ markiert)</strong> zum Anpassen, Verbessern und Basteln.</p> <p>So könnte man z.B. den Statuscode überprüfen. Hat man vergessen, seinen Hoster zu bezahlen kommt da z.B. oft 404 oder 403. Derzeit wird bei einem beliebigen Statuscode (siehe: <code>grep 'HTTP.*[0-9][0-9][0-9]' | wc -l</code>) die positive Antwort gegeben.</p> <p>Man könnte auch das Putzen des Servernamens weglassen… e.t.c,</p> https://forum.selfhtml.org/self/2022/feb/05/webseite-erreichbar-uberprufen/1795952?srt=yes#m1795952 TS ts-self@online.de https://bitworks.de 2022-02-07T03:15:10Z 2022-02-07T03:15:10Z Webseite erreichbar, überprüfen! <p>Hello,</p> <p>cURL in PHP kommt mir so vor, wie jQuery in Javascript. Da mag ich doch lieber "Banana" (entspricht Vanilla, aber für PHP) ;-)</p> <blockquote> <pre><code class="block language-php"><span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <blockquote> <p>Du hast die Aktivierung nach der Ausgabe mit <code>print_r();</code> durchgeführt.</p> </blockquote> <p>Editierungsfehler. Ich hatte die Zeile versehentlich zweimal eingefügt.</p> <blockquote> <p>Wo landet diese zusätzliche Auskunft dann?<br> Kann ich die in PHP auffangen?</p> </blockquote> <p>Das Handbuch sagt:</p> <p>„<em><strong>CURLOPT_VERBOSE</strong>: true, um ausführliche Informationen auszugeben, entweder nach STDERR oder in die mittels der Option <strong>CURLOPT_STDERR</strong> gewählte Datei.</em>“</p> <p><a href="https://www.php.net/manual/de/function.curl-setopt.php" rel="nofollow noopener noreferrer">https://www.php.net/manual/de/function.curl-setopt.php</a></p> <p>Das Handbuch ist da leider <em>„etwas undeutlich bis falsch“</em>: Erwartet wird nicht etwa ein Dateiname sondern eine „Stream-Ressource“, also etwas, was man in Perl einen „Filehandler“ nennen würde. Siehe also <code>fopen</code>, <code>tmpfile</code>, <code>fpassthru</code>, <code>fclose</code>, … - Das steht (soweit zum <em>„undeutlich“</em>) aber in einem Kasten an einer „entfernten Stelle“:</p> <p><em>“Für die folgenden option-Parameter sollte value eine Stream-Resource sein, so wie sie z. B. mittels fopen() erstellt werden kann“</em></p> <p>(Falsch ist es aber auch: Es <strong>MUSS</strong> eine Stream-Resource sein.)</p> <p><strong>So. Wir wissen genug.</strong> Exekutieren wir das in dem wir die Daten, statt diese sofort in den Fehlerkanal auszugeben, in einer temporären Datei speichern (und diese nach Ausgabe löschen):</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$dst_url</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://www.example.com'</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'Content-Type text/plain'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">error_reporting</span><span class="token punctuation">(</span> <span class="token constant">E_ALL</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">ini_set</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'display_errors'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$ch</span> <span class="token operator">=</span> <span class="token function">curl_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$tempfile</span> <span class="token operator">=</span> <span class="token function">tmpfile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### Erzeugen der temporären Datei</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span> <span class="token variable">$dst_url</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_RETURNTRANSFER</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_CUSTOMREQUEST</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'HEAD'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_NOBODY</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### So geht das:###</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_VERBOSE</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">curl_setopt</span><span class="token punctuation">(</span> <span class="token variable">$ch</span><span class="token punctuation">,</span> <span class="token constant">CURLOPT_STDERR</span><span class="token punctuation">,</span> <span class="token variable">$tempfile</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">curl_exec</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Daten aus der temporären Datei:"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token function">fpassthru</span><span class="token punctuation">(</span> <span class="token variable">$tempfile</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">### Das fclose löscht auch die temporäre Datei.</span> <span class="token comment">### Frühestmöglich ausführen. Grund im Handbuch:</span> <span class="token comment">### Wird das Skript unerwartet beendet,</span> <span class="token comment">### wird die temporäre Datei möglicherweise nicht gelöscht. </span> <span class="token function">fclose</span><span class="token punctuation">(</span> <span class="token variable">$tempfile</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"Gezeigt und gelöscht! Jetzt ..."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Daten von curl_getinfo:"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token function">curl_getinfo</span><span class="token punctuation">(</span> <span class="token variable">$ch</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"-------------------------------"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> </span></code></pre> </blockquote> <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. </div>