Detaillierte Beschreibung des schwerwiegenden zeitaufwändigen Problems von file_get_contents und getimagesize

藏色散人
Freigeben: 2023-04-23 17:38:02
nach vorne
2023 Leute haben es durchsucht

file_get_contents, getimagesize ernstes zeitaufwändiges Problem

1. Szenario und Problembeschreibung

Erstanmeldung von Drittanbietern (QQ, WeChat) Wenn der Plattformbenutzer-Avatar automatisch durch einen Drittanbieter-Avatar ersetzt wird, lautet der relevante Code wie folgt:

$logo = "http://thirdqq.qlogo.cn/g?b=oidb&k=OMu7e7tukTueShatFXVX1w&kti=ZDyqNAAAAAE&s=100&t=1611112388"
try {
    $fileContent = file_get_contents($logo);
} catch (\Exception $e) {
    throw new \Exception("读取文件[" . $logo ."]失败");
}

$imageInfo = getimagesize($logo);
if (empty($imageInfo)) {
    throw new \Exception("文件[" . $logo ."]格式有误(非图片)");
}
$base64Image = 'data:' . $imageInfo['mime'] . ';base64,' . base64_encode($fileContent);
Nach dem Login kopieren

Das Ergebnis ist, dass beim Abrufen des QQ-Benutzer-Avatars file_get_contents() zum Abrufen verwendet wird Der Inhalt der Avatar-Datei dauert 18 bis 20 Sekunden. Das 3-Sekunden-Timeout wurde nicht wirksam.

2. Lösung#🎜#

Ersetzen Sie es mit GuzzleHttp oder PHPs eigenem Curl, und das Ergebnis ist kein Timeout#🎜 🎜#
$context = stream_context_create([
    'http' => [
        'timeout' => 3 //超时时间,单位为秒
    ]
]);  
// Fetch the URL's contents 
$fileContent = file_get_contents($logo, 0, $context);
Nach dem Login kopieren

Es gibt jedoch eine zeitaufwändige Entdeckung, die Funktion getimagesize dauert ebenfalls 18 bis 20 Sekunden.

Der Avatar-Inhalt wurde auch normal abgerufen. PHP verfügt auch über eine Funktion zum Abrufen mime durch den Bildinhalt, nämlich getimagesizefromstring

$logo = "http://thirdqq.qlogo.cn/g?b=oidb&k=OMu7e7tukTueShatFXVX1w&kti=ZDyqNAAAAAE&s=100&t=1611112388"
try {
    $client = new Client(['timeout' => 3]);
    $fileContent = $client->get($logo)->getBody()->getContents();
} catch (\Exception $e) {
    throw new \Exception("读取文件[" . $logo ."]失败");
}

$imageInfo = getimagesize($logo);
if (empty($imageInfo)) {
    throw new \Exception("文件[" . $logo ."]格式有误(非图片)");
}
$base64Image = 'data:' . $imageInfo['mime'] . ';base64,' . base64_encode($fileContent);
Nach dem Login kopieren

Dieses Problem wurde gelöst.

Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Beschreibung des schwerwiegenden zeitaufwändigen Problems von file_get_contents und getimagesize. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage