Maison >développement back-end >tutoriel php >Description détaillée du problème sérieux et fastidieux de file_get_contents et getimagesize
Lorsqu'un tiers se connecte pour la première fois (QQ, WeChat), l'avatar de l'utilisateur de la plateforme est automatiquement remplacé par un avatar tiers. . Le code pertinent est le suivant
$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);
Le résultat est dans L'obtention de l'avatar de l'utilisateur QQ et l'utilisation de file_get_contents() pour obtenir le contenu du fichier de l'avatar ont pris 18 à 20 secondes
Plus tard, j'ai effectué une recherche en ligne et j'ai dit que je pouvais définir un délai d'attente.
$context = stream_context_create([ 'http' => [ 'timeout' => 3 //超时时间,单位为秒 ] ]); // Fetch the URL's contents $fileContent = file_get_contents($logo, 0, $context);
Cependant, cela n'a pas fonctionné. Le délai d'attente de 3 secondes n'a pas pris effet
Remplacez en utilisant GuzzleHttp ou le propre curl de PHP pour obtenir le contenu de l'avatar, et le résultat n'est pas de délai d'attente
$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);
Mais, il y a une découverte qui prend du temps, la fonction getimagesize prend également 18 à 20 secondes
Le contenu de l'avatar est normal. Obtenu, PHP a également une fonction pour obtenir du mime via le contenu de l'image, à savoir 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 = getimagesizefromstring($logo); if (empty($imageInfo)) { throw new \Exception("文件[" . $logo ."]格式有误(非图片)"); } $base64Image = 'data:' . $imageInfo['mime'] . ';base64,' . base64_encode($fileContent);
Ce problème a été résolu.
Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!