Dường như không ai chỉ làm việc với những gì và điều đó quá tệ nên đây là cách tôi xử lý ...
Lịch sử / Bối cảnh
Tôi đã tạo một trình tải lên SVG vào năm 2015 dựa trên bài viết CSS-Tricks xem xét những gì đã được. Tôi cũng có lưới làm việc để xem trước hình ảnh và sử dụng một vài sửa chữa khác. Plugin đơn giản (plugin kiểu tệp IMO nên đơn giản)
Giải pháp
Có một vài thay đổi cho 4.7. PITA thực sự là đối với image/
các loại mime WP hiện đang sử dụng GD trên hình ảnh. Để bỏ qua điều này, tôi đặt svg
tiện ích mở rộng để sử dụng application/svg+xml
để GD không gây rối với tệp.
Cập nhật: kể từ 4.7.2, một số tia sáng đã phá vỡ điều đó trong một số trường hợp
Sau đó, qua hook chúng tôi hotwire nó trở lại image/svg+xml
. Nó được sử dụng tương tự trong các câu trả lời khác, nhưng trước tiên chúng tôi khóa nó vào trường hợp cụ thể của chúng tôi để loại bỏ các hiệu ứng (có phải là tệp SVG); chúng ta có thể dựa vào việc đọc $data['ext']
(nên rẻ hơn hàm để lấy thông tin tệp chỉ là một so sánh và một truy cập mảng / băm).
Cập nhật: kể từ 4.7.2 $data['ext']
không phải lúc nào cũng được đặt, vì vậy chúng tôi bây giờ nếu độ dài của nó là phần mở rộng <1 trích xuất (có khả năng không an toàn) từ tên tệp sử dụng
strtolower(end(explode('.', $filename)))
. Lý do tôi thực sự chiến đấu khi sử dụng FileInfo là về cơ bản dựa vào tiện ích mở rộng PHP quá mờ và sẽ không luôn hoạt động cho mọi người (đặc biệt là những người biên dịch không có hoặc không có quyền truy cập để bật tiện ích mở rộng nếu không có). Tôi muốn một cái gì đó hoạt động thay cho một phần mở rộng. Nó không còn là vấn đề có thông tin chính xác vì vậy đối với những người tin tưởng đầu ra FileInfo
và có phần mở rộng (tôi tin rằng nó được mặc định trong 5.6+) thì nó sẽ hoạt động. Ngoài ra, vì đây là một plugin, nó không sửa đổi lõi, bạn có thể tắt mã này hoặc hủy đăng ký hook.
https://github.com/Lewiscowles1986/WordPressSVGPlugin
Xem
Cách giải quyết khác
Cho phép tải lên không được lọc là một giải pháp khủng khiếp vì như những người khác đã nói liên kết đến chủ đề này, mọi người có thể tải lên các tệp php thông qua trình tải lên phương tiện (điều đó thật tệ và nếu bạn làm điều đó, bạn nên dừng lại và suy nghĩ!)
Buộc mọi tệp thông qua bất kỳ chức năng nào mà không cần kiểm tra (Trớ trêu thay nếu bạn có image/
loại mime, bạn không thể có một kiểm tra mở rộng đơn giản). Điều này có khả năng tạo ra các hiệu ứng tiếp cận rộng hơn để giải quyết một vấn đề tương đối thích hợp và giới thiệu nhiều công việc hơn (nói chung, plugin của tôi cũng giới thiệu nhiều công việc hơn cho người dùng quản trị để giao diện người dùng quản trị phương tiện hoạt động)
Nếu chúng tôi để lại mime dưới dạng ứng dụng / svg + xml và chỉ lọc các loại mime mà hình ảnh sẽ tải lên nhưng AFAIK sẽ yêu cầu sửa lỗi để được sử dụng làm hình ảnh nổi bật, v.v. để chọn các trận chiến một cách cẩn thận.
Hi vọng điêu nay co ich.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
vàowp-config.php
. Điều này không an toàn cho sản xuất.