


Artikel ini terutamanya membincangkan sistem fail maya. Seni bina sistem fail Linux termasuk lapisan abstraksi antara sistem fail tertentu (seperti Ext2, Ext3, XFS, dll.) dan aplikasi, iaitu Sistem Fail Maya (VFS). VFS membenarkan aplikasi berkomunikasi dengan pelbagai jenis sistem fail tanpa mengetahui butiran sistem fail asas. Dengan VFS, pelaksanaan sistem fail boleh diasingkan dan dipisahkan daripada aplikasi, dengan itu meningkatkan fleksibiliti dan kebolehselenggaraan sistem. VFS juga membenarkan kernel Linux menyokong pelbagai jenis sistem fail dan menyediakan antara muka bersatu untuk aplikasi mengakses sistem fail. Di bawah rangka kerja VFS, sistem fail yang berbeza boleh berkomunikasi dengan kernel dengan melaksanakan antara muka operasi sistem fail standard
Gambar
Rajah di atas menunjukkan bahawa pusat seni bina ini ialah sistem fail maya VFS. VFS menyediakan rangka kerja sistem fail, dan sistem fail tempatan boleh dilaksanakan berdasarkan VFS. Ia terutamanya menyelesaikan tugas-tugas berikut:
1) Sebagai lapisan abstraksi, VFS menyediakan antara muka bersatu (baca, tulis, chmod, dll.) untuk lapisan aplikasi.
2) Beberapa fungsi awam dilaksanakan dalam VFS, seperti cache inode dan cache halaman.
3) Menyeragamkan antara muka yang harus dilaksanakan oleh sistem fail tertentu.
Berdasarkan tetapan di atas, sistem fail khusus lain hanya perlu mengikut konvensyen VFS, melaksanakan antara muka dan logik dalaman yang sepadan, dan mendaftarkannya dalam sistem. Selepas pengguna memformat dan memasang sistem fail, dia boleh menggunakan sumber cakera keras untuk melaksanakan operasi berdasarkan sistem fail.
Dalam sistem pengendalian Linux, selepas memformat cakera, anda perlu menggunakan arahan pelekap untuk melekapkannya ke direktori dalam pepohon direktori sistem Direktori ini dipanggil titik pelekap. Selepas pemasangan selesai, kita boleh menggunakan ruang cakera keras yang diformatkan berdasarkan sistem fail ini. Dalam sistem pengendalian Linux, titik lekap boleh menjadi hampir mana-mana direktori, tetapi untuk penyeragaman, titik lekap biasanya merupakan subdirektori di bawah direktori mnt.
Berikut menunjukkan struktur direktori yang agak kompleks. Dalam struktur direktori ini, direktori akar terletak pada cakera keras sda, dan terdapat tiga subdirektori di bawah direktori mnt, iaitu ext4, xfs dan nfs, yang masing-masing memasang sistem fail Ext4 (dibina pada cakera keras sdb) dan Sistem fail XFS (dibina pada pemacu keras sdc) dan sistem fail NFS (dipasang melalui rangkaian).
Gambar
Hubungan antara berbilang sistem fail dalam pepohon direktori diwakili oleh beberapa struktur data dalam kernel. Apabila memasang sistem fail, hubungan antara sistem fail akan diwujudkan dan API sistem fail tertentu akan didaftarkan. Apabila mod pengguna memanggil API untuk membuka fail, ia akan mencari API sistem fail yang sepadan dan mengaitkannya dengan struktur berkaitan fail (seperti fail dan inod, dsb.).
Perihalan di atas agak skema, dan anda mungkin masih berasa keliru. Tetapi jangan risau, kami akan memperkenalkan VFS dan cara menyokong berbilang sistem fail dengan lebih terperinci seterusnya berdasarkan kod.
1 Dari API sistem fail kepada VFS kepada sistem fail tertentu
VFS dalam Linux tidak wujud dari awal Versi Linux yang paling awal dikeluarkan tidak mempunyai VFS. Selain itu, VFS tidak dicipta dalam Linux Ia pertama kali dibangunkan oleh Sun pada tahun 1985 dalam SunOS2.0nya. Tujuan utama membangunkan VFS adalah untuk menyesuaikan sistem fail tempatan dan sistem fail NFS.
VFS melaksanakan abstraksi sistem fail tertentu melalui satu set API awam dan struktur data. Apabila pengguna memanggil API sistem fail yang disediakan oleh sistem pengendalian, fungsi yang dilaksanakan oleh kernel VFS dipanggil melalui gangguan lembut. Jadual berikut menunjukkan surat-menyurat antara beberapa API fail dan fungsi kernel VFS.
API Mod Pengguna |
Fungsi kernel |
Arahan |
terbuka |
do_sys_open |
Buka fail |
tutup |
ksys_close |
Tutup fail |
baca |
ksys_read/vfs_read |
Baca data |
tulis |
ksys_write/vfs_write |
Tulis data |
lekapkan |
do_mount |
Lekapkan sistem fail |
Ia boleh dilihat daripada jadual di atas bahawa setiap API mod pengguna mempunyai fungsi mod kernel yang sepadan. Apabila aplikasi memanggil API sistem fail, fungsi yang sepadan dalam keadaan kernel akan dicetuskan. Apa yang disenaraikan di sini hanyalah subset yang agak kecil bagi API sistem fail, dan tujuannya adalah untuk menggambarkan hubungan antara API dan VFS. Jika anda ingin mengetahui tentang API lain, sila baca sendiri kod sumber kernel dan saya tidak akan menerangkan butiran dalam artikel ini.
Untuk memberikan pemahaman persepsi kepada semua orang tentang hubungan antara VFS dan sistem fail tertentu, bahagian ini mengambil API penulisan Ext2 sebagai contoh untuk menunjukkan hubungan panggilan daripada API kepada fungsi VFS dan kemudian kepada fungsi sistem fail Ext2. Seperti yang ditunjukkan dalam rajah di bawah, penulisan fungsi API mencetuskan fungsi ksys_write kernel melalui gangguan lembut Selepas beberapa proses, fungsi ini akhirnya akan memanggil fungsi ext2_file_write_iter sistem fail Ext2 melalui penuding fungsi (file->f_op. ->wirte_iter).
Gambar
Dalam rajah di atas, pintu masuk ke proses kernel ialah fungsi ksys_write Seperti yang dapat dilihat dari kod pelaksanaan, tujuan utama di sini adalah untuk mendapatkan fd, dan kemudian memanggil vfs_write dengan fail ahli dalam fd sebagai parameter. . Antaranya, fd ialah struktur, dan formatnya adalah seperti yang ditunjukkan dalam rajah di bawah Ahli fail adalah struktur data yang agak teras. Seperti yang dapat dilihat dari rajah di atas, ia adalah melalui kandungan ahli ini bahawa fungsi sistem fail Ext2 dipindahkan.
Gambar
Nampak sangat mudah, VFS hanya perlu memanggil penunjuk fungsi yang didaftarkan oleh sistem fail tertentu. Tetapi terdapat masalah yang tidak dapat diselesaikan di sini Bilakah penunjuk fungsi dalam VFS didaftarkan?
Penunjuk fungsi Ext2 dimulakan apabila fail dibuka (untuk butiran, sila rujuk Bahagian 3.1.2.2 "Orang Dalam Teknologi Sistem Fail"). Seperti yang kita semua tahu, program mod pengguna mengembalikan deskriptor fail apabila ia membuka fail, tetapi fail struktur yang mewakili fail dalam kernel sepadan dengannya. Ahli yang lebih penting dalam struktur ini termasuk f_inode, f_ops dan f_mapping, seperti yang ditunjukkan dalam rajah di bawah.
Gambar
Dalam rajah di atas, f_inode ialah nod inod yang sepadan dengan fail. f_ops ialah koleksi penunjuk fungsi untuk operasi fail dalam sistem fail tertentu (seperti Ext2 Ia dimulakan apabila fail dibuka). Melalui koleksi petunjuk fungsi inilah VFS melaksanakan akses kepada sistem fail tertentu.
Di atas melibatkan satu lagi konsep VFS iaitu inode. Dalam Linux, inode ialah singkatan nod indeks, yang mewakili objek tertentu (seperti fail atau direktori) dalam sistem fail. Terdapat struktur data bernama inode dalam VFS, yang merupakan abstraksi inode sistem fail tertentu. Sebagai contoh, dalam sistem fail Ext2, ia ditakrifkan secara khusus sebagai ext2_inode_info, tetapi dalam XFS, ia diwakili oleh struktur data xfs_inode. Selain itu, struktur data inode sistem fail tertentu secara intrinsik berkaitan dengan inode VFS Anda boleh membaca kod itu sendiri.
2.inode cache dan dentry cache
Dalam rajah seni bina, kita melihat bahawa terdapat beberapa pelaksanaan cache dalam VFS, termasuk cache halaman, cache inode, cache gigi, dll. Cache inode dan cache gigi dilaksanakan dengan cara yang sama dan agak mudah. Oleh itu, artikel ini mula-mula memperkenalkan kedua-dua cache ini.
Malah, kedua-dua cache ini dilaksanakan melalui jadual cincang Semua orang tahu konsep jadual cincang, jadi saya tidak akan menerangkan secara terperinci dalam artikel ini. Ambil cache inode sebagai contoh Rajah berikut menunjukkan proses pemulaannya Melalui parameter ihash_entry, anda boleh melihat bahawa saiznya adalah dinamik (saiznya berkaitan dengan memori sistem. Semakin besar cache inode apabila memori sistem berada. baca).
Gambar
Memandangkan inod dan dentri kerap diakses semasa mengakses fail, caching fail boleh mengelakkan kehilangan prestasi yang disebabkan oleh membaca data daripada cakera keras.
3.Cache Halaman
Cache halaman VFS (Cache) digunakan terutamanya untuk meningkatkan prestasi sistem fail. Teknologi caching merujuk kepada teknologi yang menyimpan sebahagian daripada data dan metadata sistem fail dalam ingatan untuk meningkatkan prestasi sistem fail. Memandangkan kependaman akses memori ialah seratus ribu daripada kependaman capaian cakera keras mekanikal (seperti yang ditunjukkan dalam rajah di bawah, dengan daftar sebagai unit asas 1s), penggunaan teknologi caching boleh meningkatkan prestasi fail dengan ketara. sistem.
Gambar
Cache meningkatkan prestasi sistem fail melalui tiga aspek pengoptimuman IO, iaitu data panas, pra-bacaan dan penggabungan IO. Banyak aplikasi akan mempunyai data panas Contohnya, apabila pengarang mengedit dokumen, blok data semasa dan blok data berdekatan adalah data panas. Atau apabila artikel popular muncul, kandungan artikel ini adalah data panas. Prestasi peranti storan asas selalunya lebih baik untuk membaca dan menulis blok besar Baca ke hadapan bermaksud membaca blok besar data daripada peranti pendasar terlebih dahulu dan menyimpannya dalam cache, supaya permintaan aplikasi boleh dijawab melalui cache. Penggabungan IO adalah untuk permintaan tulis Permintaan tulis tidak diteruskan ke peranti bahagian belakang serta-merta, tetapi dicache dan dibahagikan kepada sebahagian besar IO sebelum menulis.
Memandangkan kapasiti memori jauh lebih kecil daripada kapasiti cakera keras, cache halaman tidak boleh cache semua data cakera keras. Dengan cara ini, hanya subset data sistem fail boleh disimpan dalam cache. Apabila pengguna terus menulis data, mereka akan menghadapi situasi di mana cache penuh Pada masa ini, ia melibatkan masalah bagaimana untuk mengepam data cache ke cakera dan kemudian menyimpan data baru.
Proses mengepam cache ke cakera dan menyimpan data baharu dipanggil penggantian cache. Terdapat banyak algoritma untuk penggantian cache, setiap satu digunakan untuk menyelesaikan masalah yang berbeza. Seterusnya kami memperkenalkan beberapa algoritma penggantian cache biasa.
Algoritma LRU, nama penuh LRU ialah Least Recently Used, yang bermaksud paling kurang digunakan baru-baru ini. Algoritma ini berdasarkan prinsip lokaliti temporal, iaitu, jika sekeping data telah digunakan baru-baru ini, terdapat kebarangkalian tinggi bahawa ia akan digunakan semula pada masa hadapan. Oleh itu, algoritma akan mengeluarkan cache yang tidak digunakan baru-baru ini.
Algoritma LRU biasanya dilaksanakan menggunakan senarai terpaut Cache yang baru digunakan akan dimasukkan ke dalam kepala jadual, manakala data yang tidak kerap digunakan akan dihimpit perlahan-lahan ke hujung senarai terpaut. Untuk memahami prinsip LRU dengan lebih jelas, kami akan menggambarkannya dengan rajah berikut.
Gambar
Dalam contoh ini, kami mengambil hits penuh sebagai contoh. Andaikan bahawa terdapat 6 blok data dalam cache, seperti yang ditunjukkan dalam baris pertama angka tersebut. Anggapkan bahawa akses pertama (boleh dibaca atau ditulis) ialah blok data No. 3. Oleh kerana ia telah diakses, ia dipindahkan ke kepala senarai terpaut.
Akses kedua ialah blok data No. 4. Mengikut prinsip yang sama, blok data ini juga dialihkan ke kepala senarai terpaut. Butiran ditunjukkan dalam baris 2 rajah di atas.
Secara analogi, selepas 4 pusingan capaian, data yang diakses telah dialihkan ke hadapan, manakala blok data yang tidak diakses (seperti 1 dan 2) perlahan-lahan dipicit ke belakang senarai terpaut. Ini menunjukkan pada tahap tertentu kemungkinan kedua-dua blok data ini diakses kemudian adalah agak kecil.
Jika terdapat hit penuh, tiada penggantian cache. Situasi sebenar ialah cache selalunya tidak mencukupi, dan data di dalamnya perlu dikeluarkan (bergantung pada keadaan, sama ada ia perlu disiram ke cakera) untuk menyimpan data baharu. Pada masa ini, algoritma LRU sangat berguna Algoritma ini menggunakan blok data ekor untuk menyimpan data baharu dan kemudian meletakkannya di kepala senarai terpaut, seperti yang ditunjukkan dalam rajah di bawah. Jika terdapat data kotor dalam blok data ini, ia perlu dibuang ke cakera, jika tidak, ia boleh dikeluarkan terus.
Gambar
Prinsip dan pelaksanaan algoritma LRU agak mudah, tetapi ia mempunyai pelbagai kegunaan. Walau bagaimanapun, algoritma LRU mempunyai kekurangan, iaitu, apabila sejumlah besar data berterusan secara tiba-tiba, semua blok cache akan diganti, menyebabkan semua statistik penggunaan cache sebelumnya menjadi tidak sah Fenomena ini dipanggil pencemaran cache. Untuk menyelesaikan masalah pencemaran cache, terdapat banyak algoritma LRU yang dipertingkatkan, antaranya yang lebih biasa ialah LRU-K, 2Q dan LIRS.
Algoritma LFU, nama penuh LFU ialah Least Frequently Used, bermakna ia paling kurang kerap digunakan baru-baru ini. Algoritma ini memutuskan blok cache yang akan dikeluarkan berdasarkan kekerapan akses data. Blok cache dengan kekerapan akses paling rendah akan dikeluarkan terlebih dahulu.
Seperti yang ditunjukkan di bawah ialah gambarajah skematik algoritma LFU. Baris 1 ialah keadaan asal, dan nombor dalam kotak mewakili bilangan kali blok cache telah diakses. Penambahan data baharu dan penghapusan blok cache dilakukan dari ekor. Andaikan bahawa sekeping data tertentu (kotak putus-putus) telah diakses 4 kali, dan bilangan akses telah berubah daripada 12 kepada 16, jadi ia perlu dialihkan ke lokasi baharu, iaitu rupa baris 2 dalam rajah. .
Gambar
Buku ini menggunakan senarai terpaut sebagai contoh untuk menggambarkan prinsip LFU untuk memudahkan pemahaman, tetapi ia tidak akan pernah dilaksanakan menggunakan senarai terpaut semasa pelaksanaan projek. Oleh kerana lokasi baharu perlu dicari apabila bilangan akses kepada blok data berubah, operasi carian senarai terpaut sangat memakan masa. Untuk mencapai carian pantas, pokok carian biasanya digunakan.
LFU juga mempunyai kelemahannya Jika blok data telah diakses dengan kerap dalam tempoh masa tertentu lama dahulu dan tidak lagi diakses pada masa hadapan, data akan kekal dalam cache. Walau bagaimanapun, oleh kerana data tidak akan diakses lagi, kapasiti berkesan cache dikurangkan. Dalam erti kata lain, algoritma LFU tidak mengambil kira situasi terkini.
Artikel ini terutamanya memperkenalkan dua algoritma penggantian yang sangat asas, LRU dan LFU. Sebagai tambahan kepada algoritma di atas, terdapat banyak algoritma penggantian, kebanyakannya berdasarkan teori LRU dan LFU, seperti 2Q, MQ, LRFU, TinyLFU dan ARC, dll. Disebabkan oleh keterbatasan ruang, buku ini tidak akan menerangkan secara terperinci Anda boleh membaca sendiri kertas yang berkaitan.
Prabacaan data juga mempunyai algoritma tertentu Algoritma prabacaan membaca data dari cakera ke cache terlebih dahulu dengan mengenal pasti corak IO. Dengan cara ini, apabila aplikasi membaca data, ia boleh membaca data terus dari cache, dengan itu meningkatkan prestasi membaca data dengan ketara.
Perkara yang paling penting dalam algoritma prabacaan ialah keadaan pencetus, iaitu, dalam keadaan apa operasi prabacaan dimulakan. Biasanya terdapat dua situasi yang mencetuskan baca ke hadapan: satu ialah apabila terdapat permintaan baca berturut-turut daripada berbilang alamat, yang mencetuskan operasi baca ke hadapan; yang lain ialah apabila aplikasi mengakses cache dengan tanda baca ke hadapan. Di sini, cache tanda prabaca ialah tanda yang dibuat pada halaman cache apabila operasi prabaca selesai Apabila aplikasi membaca cache dengan tanda ini, prabaca seterusnya akan dicetuskan, dengan itu mengetepikan pengenalan. daripada mod IO.
Gambar
Untuk menerangkan logik prabacaan dengan lebih jelas, kami memperkenalkan keseluruhan proses melalui gambar di atas. Apabila sistem fail menyedari bahawa mod IO memerlukan pra-bacaan, ia akan membaca bahagian tambahan kandungan (dipanggil pra-bacaan segerak), seperti yang ditunjukkan dalam masa 1 (baris pertama). Pada masa yang sama, untuk data baca ke hadapan segerak, sistem fail akan menandakan salah satu blok. Tujuan tanda ini adalah untuk mencetuskan prabaca seterusnya seawal mungkin sebelum akhir cache.
Pada titik kedua dalam masa, apabila aplikasi terus membaca data, kerana blok cache yang ditanda dibaca, prabaca seterusnya dicetuskan pada masa yang sama. Pada masa ini, data akan dibaca dari cakera dalam satu langkah, dan anda boleh melihat dari angka bahawa cache meningkat.
Pada titik 3 dan 4 seterusnya, aplikasi boleh membaca data terus dari cache. Memandangkan tiada blok cache yang ditanda telah dibaca, bacaan hadapan seterusnya tidak akan dicetuskan. Pada titik masa 5, kerana terdapat tanda prabaca, proses prabaca akan dicetuskan semula.
Dapat dilihat daripada analisis di atas bahawa disebabkan ciri prabacaan, data dibaca ke dalam cache terlebih dahulu. Aplikasi boleh membaca data terus dari cache tanpa mengakses cakera, jadi prestasi capaian keseluruhan akan bertambah baik.
Atas ialah kandungan terperinci Analisis ringkas tentang seni bina sistem fail Linux (Sistem Fail).. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

深度学习的概念源于人工神经网络的研究,含有多个隐藏层的多层感知器是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示,以表征数据的类别或特征。它能够发现数据的分布式特征表示。深度学习是机器学习的一种,而机器学习是实现人工智能的必经之路。那么,各种深度学习的系统架构之间有哪些差别呢?1.全连接网络(FCN)完全连接网络(FCN)由一系列完全连接的层组成,每个层中的每个神经元都连接到另一层中的每个神经元。其主要优点是“结构不可知”,即不需要对输入做出特殊的假设。虽然这种结构不可知使得完

前段时间,一条指出谷歌大脑团队论文《AttentionIsAllYouNeed》中Transformer构架图与代码不一致的推文引发了大量的讨论。对于Sebastian的这一发现,有人认为属于无心之过,但同时也会令人感到奇怪。毕竟,考虑到Transformer论文的流行程度,这个不一致问题早就应该被提及1000次。SebastianRaschka在回答网友评论时说,「最最原始」的代码确实与架构图一致,但2017年提交的代码版本进行了修改,但同时没有更新架构图。这也是造成「不一致」讨论的根本原因。

面向视觉任务(如图像分类)的深度学习模型,通常用来自单一视觉域(如自然图像或计算机生成的图像)的数据进行端到端的训练。一般情况下,一个为多个领域完成视觉任务的应用程序需要为每个单独的领域建立多个模型,分别独立训练,不同领域之间不共享数据,在推理时,每个模型将处理特定领域的输入数据。即使是面向不同领域,这些模型之间的早期层的有些特征都是相似的,所以,对这些模型进行联合训练的效率更高。这能减少延迟和功耗,降低存储每个模型参数的内存成本,这种方法被称为多领域学习(MDL)。此外,MDL模型也可以优于单

这是一个AI赋能的时代,而机器学习则是实现AI的一种重要技术手段。那么,是否存在一个通用的通用的机器学习系统架构呢?在老码农的认知范围内,Anything is nothing,对系统架构而言尤其如此。但是,如果适用于大多数机器学习驱动的系统或用例,构建一个可扩展的、可靠的机器学习系统架构还是可能的。从机器学习生命周期的角度来看,这个所谓的通用架构涵盖了关键的机器学习阶段,从开发机器学习模型,到部署训练系统和服务系统到生产环境。我们可以尝试从10个要素的维度来描述这样的一个机器学习系统架构。1.

对于下一代集中式电子电器架构而言,采用central+zonal 中央计算单元与区域控制器布局已经成为各主机厂或者tier1玩家的必争选项,关于中央计算单元的架构方式,有三种方式:分离SOC、硬件隔离、软件虚拟化。集中式中央计算单元将整合自动驾驶,智能座舱和车辆控制三大域的核心业务功能,标准化的区域控制器主要有三个职责:电力分配、数据服务、区域网关。因此,中央计算单元将会集成一个高吞吐量的以太网交换机。随着整车集成化的程度越来越高,越来越多ECU的功能将会慢慢的被吸收到区域控制器当中。而平台化

人工智能(AI)已经改变了许多行业的游戏规则,使企业能够提高效率、决策制定和客户体验。随着人工智能的不断发展和变得越来越复杂,企业投资于合适的基础设施来支持其开发和部署至关重要。该基础设施的一个关键方面是IT和数据科学团队之间的协作,因为两者在确保人工智能计划的成功方面都发挥着关键作用。人工智能的快速发展导致对计算能力、存储和网络能力的需求不断增加。这种需求给传统IT基础架构带来了压力,而传统IT基础架构并非旨在处理AI所需的复杂和资源密集型工作负载。因此,企业现在正在寻求构建能够支持AI工作负

eslint 使用eslint的生态链来规范开发者对js/ts基本语法的规范。防止团队的成员乱写. 这里主要使用到的eslint的包有以下几个: 使用的以下语句来按照依赖: 接下来需要对eslint的

本文给大家介绍如何通过修改Nginx源码实现基于端口号的 Nginx worker进程隔离方案。看看到底怎么修改Nginx源码,还有Nginx事件循环、Nginx 进程模型、fork资源共享相关的知识。


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),