Raketenwilli: Webseite erreichbar, überprüfen!

Beitrag lesen

curl_setopt( $ch, CURLOPT_VERBOSE, true );

Du hast die Aktivierung nach der Ausgabe mit print_r(); durchgeführt.

Editierungsfehler. Ich hatte die Zeile versehentlich zweimal eingefügt.

Wo landet diese zusätzliche Auskunft dann?
Kann ich die in PHP auffangen?

Das Handbuch sagt:

CURLOPT_VERBOSE: true, um ausführliche Informationen auszugeben, entweder nach STDERR oder in die mittels der Option CURLOPT_STDERR gewählte Datei.

https://www.php.net/manual/de/function.curl-setopt.php

Das Handbuch ist da leider „etwas undeutlich bis falsch“: Erwartet wird nicht etwa ein Dateiname sondern eine „Stream-Ressource“, also etwas, was man in Perl einen „Filehandler“ nennen würde. Siehe also fopen, tmpfile, fpassthru, fclose, … - Das steht (soweit zum „undeutlich“) aber in einem Kasten an einer „entfernten Stelle“:

“Für die folgenden option-Parameter sollte value eine Stream-Resource sein, so wie sie z. B. mittels fopen() erstellt werden kann“

(Falsch ist es aber auch: Es MUSS eine Stream-Resource sein.)

So. Wir wissen genug. 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):

<?php 

$dst_url = 'https://www.example.com';

header( 'Content-Type text/plain' );

error_reporting( E_ALL );
ini_set( 'display_errors', 1);

$ch = curl_init();
$tempfile = tmpfile(); ### Erzeugen der temporären Datei

curl_setopt( $ch, CURLOPT_URL, $dst_url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'HEAD' );
curl_setopt( $ch, CURLOPT_NOBODY, true );


### So geht das:###
curl_setopt( $ch, CURLOPT_VERBOSE, true ); 
curl_setopt( $ch, CURLOPT_STDERR, $tempfile );

$result = curl_exec( $ch );

echo "-------------------------------" . PHP_EOL;
echo "Daten aus der temporären Datei:" . PHP_EOL;
echo "-------------------------------" . PHP_EOL;
fpassthru( $tempfile );
### Das fclose löscht auch die temporäre Datei.
### Frühestmöglich ausführen. Grund im Handbuch:
### Wird das Skript unerwartet beendet,
### wird die temporäre Datei möglicherweise nicht gelöscht. 
fclose( $tempfile ); 
echo "-------------------------------" . PHP_EOL;
echo PHP_EOL . "Gezeigt und gelöscht! Jetzt ..." . PHP_EOL;
echo "-------------------------------" . PHP_EOL;
echo "Daten von curl_getinfo:" . PHP_EOL;
echo "-------------------------------" . PHP_EOL;
print_r( curl_getinfo( $ch ) );
echo "-------------------------------" . PHP_EOL;