2012-04-28 47 views

Trả lời

985

Không cần phải sử dụng chức năng chuỗi. Bạn có thể sử dụng một cái gì đó thực sự được thiết kế cho những gì bạn muốn: pathinfo():

$path = $_FILES['image']['name']; 
$ext = pathinfo($path, PATHINFO_EXTENSION); 
+0

$ path = $ _FILES ['image'] ['name'] [0]; tên tệp thực tế nằm trong một mảng. pathinfo sẽ chỉ đánh giá một chuỗi. – foureight84

+8

@ foureight84: Đó chỉ là trường hợp nếu bạn có các trường tải lên có tên là 'image []' ... – ThiefMaster

+2

Tôi đã sửa đổi mã của bạn một chút và tạo một hàm, trong trường hợp ai đó muốn sử dụng một hàm. Đây là mã: function getFileExtension ($ path) { $ ext = pathinfo ($ path, PATHINFO_EXTENSION); trả về $ ext; } –

12

Làm thế nào về

$ext = array_pop($userfile_extn); 
+7

đó là một chức năng dễ thương: P – Michelle

+2

Tôi không đề nghị này. Bạn đang dựa vào thứ tự của mảng là cùng một năm kể từ bây giờ. Đó là một giải pháp lười biếng mà rất có thể sẽ gây ra các vấn đề trong tương lai. –

25

Một phương pháp tốt hơn là sử dụng strrpos + substr (nhanh hơn so với nổ cho rằng):

$userfile_name = $_FILES['image']['name']; 
$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1); 

Nhưng, để kiểm tra các loại của một tập tin, sử dụng mime_content_type là một cách tốt hơn: http://www.php.net/manual/en/function.mime-content-type.php

+3

Tốt hơn 'pathinfo()'? Tôi không nghĩ vậy. – ThiefMaster

+1

Tốt hơn là phát nổ ;-). Nhưng, bạn đúng, pathinfo là một cách tốt hơn khi được kích hoạt (một số máy chủ tương hỗ vô hiệu hóa chức năng này ...). – Julien

+10

** Lưu ý quan trọng **: Điều này sẽ không thành công với các đường dẫn như: '/ var/www/website.com/somefile'. – brianreavis

20

Bạn có thể thử với điều này cho loại mime

$image = getimagesize($_FILES['image']['tmp_name']); 

$image['mime'] sẽ trả về loại mime.

Chức năng này không yêu cầu thư viện GD. Bạn có thể tìm tài liệu here.

Điều này trả về loại mime của hình ảnh.

Một số người sử dụng số $_FILES["file"]["type"] nhưng không đáng tin cậy như được trình duyệt đưa ra chứ không phải bởi PHP.

Bạn có thể sử dụng pathinfo() làm ThiefMaster đề xuất để truy xuất tiện ích mở rộng hình ảnh.

Trước tiên hãy đảm bảo rằng hình ảnh đang được tải lên thành công khi đang phát triển trước khi thực hiện bất kỳ thao tác nào với hình ảnh.

45

này sẽ làm việc tốt:

$array = explode('.', $_FILES['image']['name']); 
$extension = end($array); 
+17

'Chỉ biến được chuyển theo tham chiếu', Hướng dẫn sử dụng PHP – dader

+1

Đây không phải là cách tiếp cận tốt vì hàm 'cuối' được dùng để di chuyển con trỏ bên trong của mảng đến cuối mảng và trả về yếu tố đó. Vấn đề là mảng được truyền theo tham chiếu và vì mảng của bạn được tạo động, nó không thể được chuyển qua tham chiếu, do đó cảnh báo hoặc thất bại, tùy thuộc vào phiên bản PHP của bạn. – SteveK

+25

** Lưu ý quan trọng **: Điều này sẽ không thành công với các đường dẫn như: '/ var/www/website.com/somefile' (bạn nên sử dụng pathinfo). – brianreavis

Các vấn đề liên quan