Dosya verileri bir görüntü ise PHP bulmak

5 Cevap php

Imagine I have some file data in a variable $data. I need to determine whether it is an image or not. No need for details such as corrupt images etc.

Firs sihirli sayı bakıyor ve sonra da "görüntü" Mime türü olup olmadığını görmek tarafından dosya mime türünü almak olacağını düşündüm.

Böyle bir şans, ben komut bir "mim tipi dosya uzantısı" olsa bile, ben sihirli numaradan mim almak için güvenilir bir yol yok.

My next option was to have a reasonable list of image file magic numbers and consult them. However, it relatively difficult to find such magic numbers (gif for instance has different magic numbers, some of which could pretty rare - if memory serves me right).

Daha iyi bir fikir bu tür bir şey yapabileceğiniz bazı linux program olacaktır.

Herhangi bir fikir? Ben RHEL ve PHP 5.3 koşuyorum. Ben root erişimi var - gerekirse şeyler yüklemek mümkün yani.

- Chris.

5 Cevap

(Albay Shrapnel tespit ettik) en iyi cevabı kullanımı olacaktır:

$handle=imagecreatefromstring($data);

PHP kılavuzu alıntı:

An image resource will be returned on success. FALSE is returned if the image type is unsupported, the data is not in a recognised format, or the image is corrupt and cannot be loaded.

Standart file programı aradığınız şey olabilir. Bu dosya biçimini tanımlamak için sihirli sayılar bir tablo kullanır:

$ file test.jpg 
test.jpg: JPEG image data, JFIF standard 1.01

Eğer geçici bir dosya oluşturmak için istemiyorsanız, onun stdin içine verileri file - kullanabilir ve boru olabilir. file çıkışını yazmak ve kısa sürede biçimi belli olması için dere okumak yeterli gibi durur, çünkü çocuk sürecin sonlandırılması için izlemek emin olun.

There also was finfo: http://php.net/manual/en/function.finfo-open.php Lots of working code on this php.net manual page.

Ayrıca sizin veri akışının ilk 3-byte kontrol edebilir, resim dosya biçimini tanımlayan resim dosyası başlığı veri olmalıdır.

Ben olsaydım görüntü kaynak oluştururken, bu ek bellek kullanmak çünkü imagecreatefromstring solution if you only bir görüntü olup olmadığını belirlemek gerekir kullanarak önlemek istiyorum. Ayrıca sadece JPEG, PNG, GIF, WBMP ve GD2 destek olacaktır. Diğer aynı derecede geçerli görüntü formatları, örneğin, geçerli olmaz ise. ICO.

Önerildiği gibi finfo kullanmak istiyorsunuz ya PECL uzantıları yoksa, ben file -bi image... öneririz. Bu içerik türünü, örneğin dönecekti gibi. image/png. O image/* ile başlıyorsa eğer sadece kontrol edebilirsiniz. Bu şekilde komut herhangi bir görüntü formatını kabul eder.

Eğer bazı ek fikir almak için this makaleyi okuyabilirsiniz.
İyi şanslar