Rumah >pembangunan bahagian belakang >tutorial php >Penerangan terperinci tentang masalah serius yang memakan masa file_get_contents dan getimagesize

Penerangan terperinci tentang masalah serius yang memakan masa file_get_contents dan getimagesize

藏色散人
藏色散人ke hadapan
2023-04-23 17:36:202292semak imbas

Isu serius yang memakan masa dengan file_get_contents dan getimagesize

1. Senario dan penerangan masalah

Apabila pihak ketiga log masuk untuk kali pertama (QQ, WeChat ), avatar pengguna platform akan ditukar secara automatik Tukar kepada avatar pihak ketiga, kod yang berkaitan adalah seperti berikut

$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);

Akibatnya, apabila mendapatkan avatar pengguna QQ dan menggunakan file_get_contents() untuk mendapatkan kandungan fail avatar, ia mengambil masa 18 hingga 20 saat

Kemudian saya mencari dalam talian dan mengatakan bahawa saya boleh menetapkan tamat masa

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

Namun, ia tidak berjaya Tamat masa 3 saat tidak berkuat kuasa

2. Penyelesaian

Ganti dengan GuzzleHttp atau Curl PHP sendiri mendapat kandungan avatar, dan hasilnya tiada masa tamat

$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);

Namun, terdapat penemuan yang memakan masa, fungsi getimagesize juga mengambil masa 18 hingga 20 saat

Kandungan avatar telah diperolehi secara normal , PHP juga mempunyai fungsi untuk mendapatkan mime melalui kandungan imej iaitu 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);

Masalah ini telah selesai.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Penerangan terperinci tentang masalah serius yang memakan masa file_get_contents dan getimagesize. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam