> 백엔드 개발 > PHP 튜토리얼 > file_get_contents 및 getimagesize의 심각한 시간 소모 문제에 대한 자세한 설명

file_get_contents 및 getimagesize의 심각한 시간 소모 문제에 대한 자세한 설명

藏色散人
풀어 주다: 2023-04-23 17:38:02
앞으로
2061명이 탐색했습니다.

file_get_contents, getimagesize 시간이 많이 걸리는 문제

1. 시나리오 및 문제 설명

제3자가 처음 로그인하면(QQ, WeChat) 플랫폼 사용자 아바타가 자동으로 제3자 아바타로 대체됩니다. 해당 코드는 다음과 같습니다

$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);
로그인 후 복사

결과는 QQ 사용자 아바타를 구하고 file_get_contents()를 사용하여 아바타 파일 내용을 구하는데 18~20초가 걸렸습니다

나중에 인터넷에서 검색해보니 타임아웃을 설정할 수 있다고 하더군요.

$context = stream_context_create([
    'http' => [
        'timeout' => 3 //超时时间,单位为秒
    ]
]);  
// Fetch the URL's contents 
$fileContent = file_get_contents($logo, 0, $context);
로그인 후 복사

하지만 작동하지 않았습니다. 3초 타임아웃이 적용되지 않았습니다

2, 해결책

GuzzleHttp 또는 PHP 자체 컬을 사용하여 아바타 콘텐츠를 가져왔고 결과는 타임아웃이 없습니다

$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);
로그인 후 복사

하지만, 시간이 많이 걸리는 발견이 있으며, getimagesize 함수에도 18~20초가 걸립니다

아바타 콘텐츠는 정상입니다. PHP에는 이미지 콘텐츠를 통해 MIME을 얻는 기능, 즉 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);
로그인 후 복사

이후 문제가 해결되었습니다. .

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 file_get_contents 및 getimagesize의 심각한 시간 소모 문제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿