Hallo,
Schade, dass die Verbindung nicht geprüft werden kann auf deinem System. Dies kann leider viele Gründe haben.
die Funktion
Code: Alles auswählen
function IsAccessProtected()
{
$rc = false;
if (isset($_SERVER['HTTPS']) && (strtolower((string) $_SERVER['HTTPS']) == 'on' || $_SERVER['HTTPS'] == 1)) {
$scheme = 'https';
} elseif (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
$scheme = 'https';
} else {
$scheme = 'http';
}
$url = sprintf('%s://%s%s', $scheme, $_SERVER['HTTP_HOST'], dirname((string) $_SERVER['PHP_SELF']));
$headers = @get_headers($url);
if (is_array($headers) && count($headers) > 0) {
$rc = (preg_match('/\s+(?:401|403)\s+/', (string) $headers[0])) ? 1 : 0;
}
return $rc;
}
Liefert ein false zurück.
Dies kann daran liegen, dass $url einen falschen Wert enthält.
Die Funktion `get_headers` in PHP wird verwendet, um alle Header zu erhalten, die der Server in der Antwort auf eine HTTP-Anfrage sendet. Um sicherzustellen, dass `$headers` einen Inhalt enthält, müssen Sie einige Dinge beachten:
- Stelle sicher, dass `$url` eine gültige und erreichbare URL ist, die mit dem Protokoll (z.B. `http://` oder `https://`) beginnt.
- Stelle sicher, dass du die richtigen Kontextoptionen für die Verbindung angibst, falls erforderlich. Wir können die Funktion `stream_context_create` verwenden, um einen Kontext zu erstellen, und ihn als dritten Parameter an `get_headers` übergeben.
- Stelle sicher, dass du den zweiten Parameter von `get_headers` auf `1` setzt, wenn du ein assoziatives Array zurückgeben möchtest, das die Header-Namen als Schlüssel enthält.
- Stelle sicher, dass Sie die Fehlerbehandlung implementierst, falls `get_headers` `false` zurückgibt oder eine Warnung auslöst. (bei dir liefert get_headers ein false
Hier ist ein Beispiel für die Verwendung von `get_headers` mit einem Kontext und einem assoziativen Array:
Code: Alles auswählen
function IsAccessProtected()
{
$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'header' => 'User-Agent: Mozilla/5.0\r\n'
)
));
$rc = false;
if (isset($_SERVER['HTTPS']) && (strtolower((string) $_SERVER['HTTPS']) == 'on' || $_SERVER['HTTPS'] == 1)) {
$scheme = 'https';
} elseif (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
$scheme = 'https';
} else {
$scheme = 'http';
}
$url = sprintf('%s://%s%s', $scheme, $_SERVER['HTTP_HOST'], dirname((string) $_SERVER['PHP_SELF']));
$headers = @get_headers($url, 1, $context);
if (is_array($headers) && count($headers) > 0) {
$rc = (preg_match('/\s+(?:401|403)\s+/', (string) $headers[0])) ? 1 : 0;
}
return $rc;
}
man kann dies auf seinem System prüfen , warum es nicht erkannt wird und das folgende Skript anpassen bis man ein haeder erhält.
Code: Alles auswählen
// Erstellen Sie einen Kontext mit einigen Optionen
$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'header' => 'User-Agent: Mozilla/5.0\r\n'
)
));
// Geben Sie die URL an
$url = 'https://www.example.com';
// Rufen Sie die Header mit dem Kontext und dem assoziativen Array auf
$headers = @get_headers($url, 1, $context);
// Überprüfen Sie, ob die Header erfolgreich abgerufen wurden
if ($headers !== false) {
// Drucken Sie die Header aus
print_r($headers);
} else {
// Behandeln Sie den Fehler
echo 'Fehler beim Abrufen der Header';
}
Ich hoffe, das hilft weiter.
PHP: get_headers - Manual.
https://www.php.net/manual/en/function.get-headers.php.
Schönes Wochenende
Ralf