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);
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);
Es gibt jedoch eine zeitaufwändige Entdeckung, die Funktion getimagesize dauert ebenfalls 18 bis 20 Sekunden.
$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);
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!