Description détaillée du problème sérieux et fastidieux de file_get_contents et getimagesize

藏色散人
Libérer: 2023-04-23 17:38:02
avant
2038 Les gens l'ont consulté

file_get_contents, getimagesize problème sérieux qui prend du temps

1. Scénario et description du problème

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);
Copier après la connexion

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);
Copier après la connexion

Cependant, cela n'a pas fonctionné. Le délai d'attente de 3 secondes n'a pas pris effet

2, solution

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);
Copier après la connexion

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);
Copier après la connexion

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!

Étiquettes associées:
php
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal