PHP файл поврежден при загрузке - PullRequest
0 голосов
/ 23 января 2020

Я пишу код для загрузки файлов в форматах изображений и видео. Когда форма является кодом, она принудительно загружается. Однако, когда я go открываю загруженный файл, они не могут быть прочитаны. Я не уверен, что мне не хватает типа заголовка контента или что. Я проверил на этом сайте, и мой код почти идентичен многим из приведенных ответов.

if($_SERVER['REQUEST_METHOD'] === 'POST'){
    if(isset($_POST['so_media'])){

        //validate file mime type
        function check_doc_mime( $tmpname ) {
            // MIME types: http://filext.com/faq/office_mime_types.php
            $tmpname = str_replace(get_site_url().'/wp-content/uploads', '',$tmpname);
            $tmpname=  wp_upload_dir()['basedir'].$tmpname;
            if(!file_exists($tmpname)){
                var_dump('FILE DOES NOT EXIST');
                return FALSE;
            }
            $finfo = finfo_open( FILEINFO_MIME_TYPE );
            var_dump($finfo);
            $mtype = finfo_file( $finfo, $tmpname );
            var_dump($mtype);
            finfo_close( $finfo );
            if( $mtype == ( "image/jpeg" ) ||
                $mtype == ( "image/png" ) ||
                $mtype == ( "image/gif" ) ||
                $mtype == ( "video/mp4" )
                ) {
                var_dump('Valid Mime type');
                return $mtype;
            } else {
                var_dump('Invalid Mime type');
                return FALSE;
            }
        }

        if($mtype = check_doc_mime($_POST['so_media'])){
            $file_name = str_replace(get_site_url().'/wp-content/uploads', '', $_POST['so_media']);
            $file_name =  wp_upload_dir()['basedir'].$_POST['so_media'];
            $file_url = $file_name;
            header('Content-Description: File Transfer');
            header('Content-Type: '.$mtype);
            header('Expires: 0');
            header("Content-Transfer-Encoding: Binary");
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
            header('Content-Length: ' . filesize($file_url));
            ob_clean();
        flush();
            readfile($file_url);
            exit;
        }
    }
}


//Code for the form

<form method='post' action='<?php $current_url;?>' style='display:inline-block;'>
    <input type='hidden' name='so_media' value='<?php echo $item_so_meta['upload']['url']; ?>'>
    <button class='button-white' type='submit'>Download Attached Media</button>
</form>

//end form
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...