최신 WP 업데이트 이후 SVG 파일이 업로드되지 않음


16

SVG 파일을 업로드 할 수있는 PHP 파일에 스 니펫이 있습니다. 오늘 최신 WP 버전으로 업그레이드 한 후 더 이상 svgs를 업로드 할 수 없습니다. 또한 CSS 트릭 웹 사이트에서 두 번째 코드 스 니펫을 시도했지만 작동하지 않습니다.

누구든지 a) 마지막 업데이트로이 문제를 일으킨 원인 및 b) 해결 방법을 알고 있습니까?

내가 일반적으로 사용하는 코드는 다음과 같습니다.

function svg_mime_types( $mimes ) {
   mimes['svg'] = 'image/svg+xml';
   return $mimes;}
add_filter( 'upload_mimes', 'svg_mime_types' );  

많은 감사

답변:


16

WordPress 4.7.1에서는 업로드 된 파일의 실제 MIME 유형을 확인 하는 변경 사항이 도입되었습니다 . SVG 또는 DOCX와 같은 파일 형식 업로드가 중단됩니다. WordPress Core에는이 문제에 대한 티켓이 이미 있으며 이에 대한 자세한 내용을 볼 수 있습니다.

일시적으로 (이 문제가 해결 될 때까지의 시간에 대한) 및 권장 해결 방법은 다음과 같은 플러그인 :
사용 안함 실제 MIME 확인

해당 플러그인을 사용하지 않으려는 경우 동일한 기능이 있습니다.

add_filter( 'wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
    global $wp_version;

    if ( '4.7.2' !== $wp_version ) {
       return $data;
    }

    $filetype = wp_check_filetype( $filename, $mimes );

    return [
        'ext'             => $filetype['ext'],
        'type'            => $filetype['type'],
        'proper_filename' => $data['proper_filename']
    ];

}, 10, 4 );

이 스니핑에는 WordPress가 업데이트되는 즉시 수정 프로그램을 사용하지 않도록 버전 확인 기능이 포함되어 있습니다.

편집하다

이 문제는 4.7.2에서 처음 수정되었습니다. 그러나 4.7.2가 긴급 보안 릴리스 였으므로이 수정은 해당 버전으로 이루어지지 않았습니다. 이제 4.7.3에서 수정되었습니다.


2
개발 환경에 대한 대체 해결 방법 : 추가 define( 'ALLOW_UNFILTERED_UPLOADS', true );wp-config.php. 이것은 생산에 안전하지 않습니다.
Tim Malone

1
한 곳에서 모든 정보를 수집하려면 관련 포럼 스레드도 있습니다. wordpress.org/support/topic/wp-4-7-1-kills-svg
Tim Malone

고마워 현재 긴급한 상황은 아니지만 해결 방법이 있음을 아는 것이 좋습니다. 대단히 감사합니다.
Paul12_

'svg' === strtolower($filetype['ext']);작업이 필요하지 않거나 (주로) 파일이 svg 유형이 아닌 경우 더 많은 작업을 소개 하지 않는 한 너무 넓은 범위의 효과를 소개합니다.
MrMesees


2

아무도 방금 작업 한 것으로 보이지 않으며 너무 나빠서 여기에 내가 처리 한 방법이 있습니다 ...

연혁 / 배경

나는 2015 년에 CSS-Tricks 기사를 기반으로 SVG 업 로더를 만들었습니다. 또한 이미지 미리보기를 위해 그리드 작업을 수행했으며 몇 가지 다른 수정 사항을 사용했습니다. 간단한 플러그인 (IMO 파일 유형 플러그인은 단순해야 함)

해결책

4.7에 대한 몇 가지 변경 사항이있었습니다. 실제 PITA는 MME image/유형의 경우 WP가 이제 이미지에서 GD를 사용한다는 것입니다. 이것을 우회 svg하기 위해 application/svg+xmlGD가 파일을 엉망으로 만들지 않도록 확장을 사용 하도록 설정했습니다 .

업데이트 : 4.7.2 현재 일부 경우에 밝은 불꽃이 파산했습니다.

그런 다음 후크를 통해 다시 핫 와이어로 연결합니다 image/svg+xml. 다른 답변에서 사용되는 것과 동일하지만 먼저 효과를 제거하기 위해 특정 사례에 고정합니다 (SVG 파일입니까). 우리는 읽기에 의존 할 수 있습니다 $data['ext'](파일 정보를 하나의 비교와 하나의 배열 / 해시 액세스로 얻는 기능보다 저렴해야합니다).

업데이트 : 4.7.2 현재 $data['ext']는 항상 설정되지는 않으므로 길이가 <1 인 경우 확장명을 사용하여 파일 이름에서 확장 (안전하지 않은) 확장자를 사용 strtolower(end(explode('.', $filename)))합니다. 필자가 FileInfo를 사용하여 실제로 싸우는 이유는 본질적으로 PHP 확장에 의존하는 것이 너무 불투명하고 모든 사람에게 항상 작동하지는 않기 때문입니다 (특히 확장 기능이 없으면 확장 기능을 사용하도록 설정하지 않고 컴파일하지 않는 사람은). 확장 기능을 그대로 사용하고 싶습니다. 더 이상 올바른 정보를 얻는 것이 중요하지 않으므로 출력을 신뢰 FileInfo하고 확장 기능을 가진 사람들 (기본값은 5.6 이상이라고 생각합니다)이 작동해야합니다. 또한 이것은 플러그인이므로 코어를 수정하지 않으므로이 코드를 끄거나 후크를 등록 취소 할 수 있습니다.

https://github.com/Lewiscowles1986/WordPressSVGPlugin

보다

다른 해결 방법

필터링되지 않은 업로드를 허용하는 것은 다른 사람들 이이 스레드에 연결한다고 말했듯이 사람들이 미디어 업 로더를 통해 PHP 파일을 업로드 할 수 있다고 말했기 때문에 끔찍한 해결책입니다.

검사없이 모든 기능을 통해 모든 파일을 강제 실행합니다 ( image/마이크 유형 인 경우에는 간단한 내선 검사 만 할 수 없습니다). 이것은 상대적으로 틈새 문제를 해결하기 위해 훨씬 더 넓은 범위의 효과를 만들 수 있으며 전체적으로 더 많은 작업을 제공합니다 (내 플러그인은 캐비티 사용자가 관리 미디어 UI를 작동시키는 데 더 많은 작업을 제공합니다)

우리가 mime을 application / svg + xml로 남겨두고 단순히 mime 유형을 필터링하면 이미지가 업로드되지만 AFAIK는 추천 이미지 등으로 사용하기 위해 수정이 필요합니다. 보편적 SVG 경험을 보장하기 위해 더 많은 작업이 필요하므로 신중하게 전투를 선택합니다.

도움이 되었기를 바랍니다.


글쎄,이 모든 것을 이끌어내는 핵심 문제는 업로드 된 파일을 게시하기 전에 중재가 없다는 사실입니다. 기본적으로 파일 확장자에 따라 파일이 악한 지 추측하는 것은 항상 나쁜 생각입니다. 이론적으로 관리자가 모든 업로드를 허용하는 데 아무런 문제가 없으므로 제안 된 수정 중 일부는 일반적으로 너무 넓을 수 있지만 실제로는 많은 사람들에게 충분할 수 있습니다. 참고 IMHO SVG는 PDF와 같은 이미지의 이미지이지만 기술적으로는 그렇지 않습니다.
Mark Kaplun

전 세계 브라우저 공급 업체 및 소프트웨어 제작자와 마찬가지로 MIME 유형을 만든 사람은 귀하와 동의하지 않습니다. WordPress는 네트워크 보안을 목적으로하지 않기 때문에 확장명 만 확인합니다. Microsoft Office가 차량을 주차하지 않는 것과 같은 이유로 괜찮습니다. 그것은 적어도 WP 훨씬 더 피상적보다 확인해야 할 말을 쌍곡선이다 그러나 나는 더 보안 작업이있을 필요가 동의 그냥 WP는 그 일에 적합한 차량 (거의 너무 커서 그대로 것)입니다
MrMesees

실제로 브라우저는 모든 종류의 상황에서 내용을 검사합니다. developer.mozilla.org/en-US/docs/Mozilla/… 그들은 확장을 보지 않습니다. 그렇습니다.
아무도이

우선, 하나의 브라우저에서 하나의 블로그 기사! = 모든 브라우저. Chrome이 MIME에 관심을 기울이는 것을 알고 있습니다. 둘째, 파일의 내부 검사는 규칙을 따릅니다. 느슨한 언어에서 알 수 있듯이 자유 형식은 아닙니다. 보다 포괄적 인 검증은 유연성을 위해 성능을 교환합니다 (다중 사용자 공개 오퍼링이 아닌 단일 PC 레벨 클라이언트에서 작동). 이 열린 Firefox를 증명하려면 100 개의 탭을 열어 메모리 및 CPU 사용량을 확인하십시오. 웹 사이트 요청 100 건으로 동일하게 시도하십시오! 마지막으로, 당신이 탈선을 추가하지 않을 실제 사실이 없다면 멈추십시오. 그것은 상당히 악화되고 누구에게도 도움이되지 않습니다.
MrMesees

방금 업로드 한 파일의 256 바이트를 검사하면 파일이 메모리 또는 SSD 캐시에있을 수 있으므로 성능 저하가 거의 발생하지 않으며, 파일 크기 조정, 축소판 생성 등으로 인해 성능 저하와 비교할 때 아무 효과가 없습니다. 아니. 다른 브라우저의 경우와 동일한 코드 흐름은 아니지만이 stackoverflow.com/questions/1201945/… 에서 크롬과 파이어 폭스가 매우 많이 정렬되어 있다고 가정하지는 않습니다.
Mark Kaplun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.