在PHP中如何通过unpack来准确获取文件格式
目的:识别用户上传的XML
问题1:用户上传的XML可能存在修改后缀的情况,即本身是脚本语言,却伪装成XML,例如PHP
已解决:那么我通过下面的代码来准确获取文件后缀
问题2:代码是通过fread读取文件头两字节,在识别图片方面非常好使,但是在区别xml和PHP方面却不是很清晰了,因为他们头两个字节都是'',请问如何处理呢?
<code> if (($fp = fopen($this->path, 'rb')) == FALSE) { throw new \Exception('打开文件失败。'); } if (!($read = fread($fp, 2))) { throw new \Exception('文件内容读取为空或读取失败'); }; $info = unpack('C2chars', $read); $code = intval($info['chars1'].$info['chars2']); fclose($fp); switch ($code) { case 3780: return 'pdf'; case 5666: return 'psd'; case 6033: return 'html'; case 6063: return 'xml'; // php default: throw new \Exception('文件格式超出了系统识别范围。'); } </code>
回复内容:
目的:识别用户上传的XML
问题1:用户上传的XML可能存在修改后缀的情况,即本身是脚本语言,却伪装成XML,例如PHP
已解决:那么我通过下面的代码来准确获取文件后缀
问题2:代码是通过fread读取文件头两字节,在识别图片方面非常好使,但是在区别xml和PHP方面却不是很清晰了,因为他们头两个字节都是'',请问如何处理呢?
<code> if (($fp = fopen($this->path, 'rb')) == FALSE) { throw new \Exception('打开文件失败。'); } if (!($read = fread($fp, 2))) { throw new \Exception('文件内容读取为空或读取失败'); }; $info = unpack('C2chars', $read); $code = intval($info['chars1'].$info['chars2']); fclose($fp); switch ($code) { case 3780: return 'pdf'; case 5666: return 'psd'; case 6033: return 'html'; case 6063: return 'xml'; // php default: throw new \Exception('文件格式超出了系统识别范围。'); } </code>
其实我觉得没你想的那么复杂啊,不要太在意后缀这个问题嘛,关键是文件内容。你只要用XML类解析就好咯,比如simplexml
,如果不是规范的XML文档的话是会返回false
的,另外最后也可以将内容全部转换为string
防止文件内代码的执行。

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

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.
