Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan PHP untuk memuat turun semua imej di Internet

Gunakan PHP untuk memuat turun semua imej di Internet

王林
王林asal
2023-06-13 09:41:591758semak imbas

Dengan populariti Internet, gambar telah menjadi sebahagian daripada kehidupan seharian orang ramai Sama ada dalam media sosial, maklumat berita atau diari peribadi, gambar memainkan peranan yang sangat penting. Oleh itu, kami secara semula jadi memikirkan cara menggunakan PHP untuk memuat turun semua gambar di Internet dan menyediakan lebih banyak fungsi yang berkaitan dengan gambar. Dalam artikel seterusnya, kami akan memberi tumpuan kepada kaedah dan teknik khusus menggunakan PHP untuk memuat turun semua imej di Internet.

  1. Dapatkan pautan imej di Internet

Untuk memuat turun imej di Internet, anda perlu terlebih dahulu menjelaskan sumber imej Secara umumnya, imej pada halaman web adalah melalui tag img Dirujuk, supaya kita boleh mendapatkan pautan imej dengan menghuraikan kod halaman HTML. Dalam PHP, anda boleh menggunakan fungsi CURL atau file_get_contents untuk mendapatkan kod HTML halaman:

$url = 'https://www.example.com';
$html = file_get_contents($url);

Selepas mendapat kod HTML, kami boleh menggunakan ungkapan biasa untuk memadankan pautan imej di dalamnya. Katakan kita ingin mendapatkan semua pautan yang berakhir dengan .jpg, .jpeg, .png, .gif, kita boleh menggunakan ungkapan biasa berikut:

preg_match_all('/<img.*?src=["'](.+?.(?:jpg|jpeg|png|gif))["'].*?>/i', $html, $matches);
$links = array_unique($matches[1]);

Dalam kod di atas, fungsi preg_match_all menggunakan ungkapan biasa untuk memadankan HTML img tag masuk, kemudian dapatkan semua pautan imej melalui $matches[1], dan kemudian gunakan fungsi array_unique untuk mengalih keluar pautan pendua.

  1. Muat turun imej dan simpan secara setempat

Selepas mendapat pautan ke imej, kami boleh menggunakan fungsi curl atau file_get_contents untuk memuat turun imej ke setempat. Untuk mengelakkan memuat turun fail dengan nama yang sama, kami boleh memberikan setiap fail nama fail yang unik. Kaedah mudah adalah untuk menjana nama fail berdasarkan masa semasa dan nilai MD5:

foreach ($links as $link) {
    $extension = pathinfo(parse_url($link, PHP_URL_PATH), PATHINFO_EXTENSION);
    $filename = md5($link . time()) . '.' . $extension;
    file_put_contents($filename, file_get_contents($link));
}

Dalam kod di atas, kami menggunakan gelung foreach untuk melintasi semua pautan imej, dan menggunakan fungsi parse_url untuk mendapatkan laluan dalam pautan (tidak termasuk bahagian nama domain ), kemudian gunakan fungsi pathinfo untuk mendapatkan sambungan dalam laluan, akhirnya gunakan fungsi file_get_contents untuk memuat turun imej ke tempatan, dan gunakan fungsi file_put_contents untuk menyimpan kandungan fail yang dimuat turun sebagai fail tempatan. Memandangkan setiap nama fail adalah unik, tidak perlu risau tentang nama pendua.

  1. Mengendalikan pengecualian muat turun

Semasa proses memuat turun gambar, anda mungkin menghadapi beberapa situasi yang tidak normal, seperti pautan gambar tidak tersedia, kelajuan muat turun terlalu perlahan, dll. Untuk mengelakkan situasi tidak normal ini daripada menyebabkan kesan buruk pada program, kami boleh melakukan pengendalian pengecualian pada proses muat turun. Sebagai contoh, apabila muat turun fail gagal, anda boleh mencetak mesej ralat atau log:

foreach ($links as $link) {
    $extension = pathinfo(parse_url($link, PHP_URL_PATH), PATHINFO_EXTENSION);
    $filename = md5($link . time()) . '.' . $extension;
    $content = @file_get_contents($link);
    if ($content !== false) {
        file_put_contents($filename, $content);
    } else {
        error_log('Failed to download ' . $link);
    }
}

Dalam kod di atas, kami menggunakan topeng ralat @ untuk menutup gesaan ralat fungsi file_get_contents, dan kemudian gunakan struktur penghakiman untuk menyemak hasil muat turun, dan gunakan fungsi error_log untuk merekod maklumat ralat.

  1. Kawal kelajuan muat turun

Apabila memuat turun imej secara besar-besaran, kita juga perlu mempertimbangkan isu kelajuan muat turun. Jika kelajuan muat turun terlalu pantas, ia boleh menyebabkan beban yang tidak perlu pada pelayan, malah boleh dianggap sebagai serangan berniat jahat oleh pelayan. Oleh itu, kita perlu mengehadkan kelajuan muat turun.

Untuk mengawal kelajuan muat turun, kita boleh menggunakan fungsi tidur untuk menjeda atur cara untuk tempoh masa. Sebagai contoh, kami boleh menetapkan jeda 1 saat selepas memuat turun gambar untuk memastikan program tidak akan meletakkan beban berat pada pelayan semasa memuat turun gambar:

foreach ($links as $link) {
    $extension = pathinfo(parse_url($link, PHP_URL_PATH), PATHINFO_EXTENSION);
    $filename = md5($link . time()) . '.' . $extension;
    $content = file_get_contents($link);
    if ($content !== false) {
        file_put_contents($filename, $content);
    } else {
        error_log('Failed to download ' . $link);
    }
    sleep(1);
}

Dalam kod di atas, kami menggunakan fungsi tidur untuk menjeda program selama 1 saat.

Ringkasan

Dalam artikel ini, kami meneroka secara terperinci cara menggunakan PHP untuk memuat turun semua imej di Internet. Idea khusus adalah untuk mendapatkan semua pautan imej dahulu, kemudian gelung melalui semua pautan, gunakan fungsi file_get_contents untuk memuat turun imej dan menyimpannya secara setempat, dan akhirnya melaksanakan pengendalian pengecualian dan kawalan kelajuan pada proses muat turun. Walaupun artikel ini hanya menyediakan pelaksanaan PHP yang mudah, saya percaya bahawa pembaca boleh lebih memahami dan menguasai proses pelaksanaan muat turun imej melalui pengenalan artikel ini, dan membantu pembaca mendapat idea dan penyelesaian yang lebih baik apabila menghadapi masalah yang berkaitan.

Atas ialah kandungan terperinci Gunakan PHP untuk memuat turun semua imej di Internet. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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