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

藏色散人
Lepaskan: 2023-04-23 17:38:02
ke hadapan
2204 orang telah melayarinya

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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!

Label berkaitan:
php
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan