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>