.আর।, জিপ ফাইল মাইম টাইপ


156

আমি একটি সাধারণ পিএইচপি আপলোড স্ক্রিপ্ট বিকাশ করছি এবং ব্যবহারকারীরা কেবল জিপ এবং আরএআর ফাইলগুলি আপলোড করতে পারবেন।

আমার কি MIME প্রকারগুলি পরীক্ষা করতে হবে $_FILES[x][type]? (একটি সম্পূর্ণ তালিকা দয়া করে)

ধন্যবাদ..



আমি সমস্ত সংকুচিত ফাইলগুলিকে একা অনুমতি দিতে চাই (রার, জিপ, টার.gz, জার ইত্যাদি), পদ্ধতিটি কী?
রিধুবর্তন

উত্তর:


258

মুক্তিযোদ্ধা, কিয়ারাশ এবং স্যাম ভ্লোবার্গের উত্তর:

.rar    application/x-rar-compressed, application/octet-stream
.zip    application/zip, application/octet-stream, application/x-zip-compressed, multipart/x-zip

আমি ফাইল নামের উপর একটি চেক করতে হবে। ফাইলটি কোনও আরআর বা জিপ ফাইল কিনা তা আপনি এখানে পরীক্ষা করতে পারেন। আমি একটি দ্রুত কমান্ড লাইন অ্যাপ্লিকেশন তৈরি করে এটি পরীক্ষা করেছি।

<?php

if (isRarOrZip($argv[1])) {
    echo 'It is probably a RAR or ZIP file.';
} else {
    echo 'It is probably not a RAR or ZIP file.';
}

function isRarOrZip($file) {
    // get the first 7 bytes
    $bytes = file_get_contents($file, FALSE, NULL, 0, 7);
    $ext = strtolower(substr($file, - 4));

    // RAR magic number: Rar!\x1A\x07\x00
    // http://en.wikipedia.org/wiki/RAR
    if ($ext == '.rar' and bin2hex($bytes) == '526172211a0700') {
        return TRUE;
    }

    // ZIP magic number: none, though PK\003\004, PK\005\006 (empty archive), 
    // or PK\007\008 (spanned archive) are common.
    // http://en.wikipedia.org/wiki/ZIP_(file_format)
    if ($ext == '.zip' and substr($bytes, 0, 2) == 'PK') {
        return TRUE;
    }

    return FALSE;
}

লক্ষ্য করুন যে এটি এখনও 100% নির্দিষ্ট হবে না তবে এটি সম্ভবত যথেষ্ট ভাল।

$ rar.exe l somefile.zip
somefile.zip is not RAR archive

এমনকি উইনআরআরও আরএফ ফাইলগুলি এসএফএক্স সংরক্ষণাগার হিসাবে সনাক্ত করে:

$ rar.exe l somefile.srr
SFX Volume somefile.srr

2
মাল্টিপার্ট / এক্স-জিপ হ'ল .zip (PKZIP সংরক্ষণাগার) এর জন্য বৈধ
মাইম টাইপ

13
আসলে জিপের জন্য আরও একটি মাইম টাইপ রয়েছে, এবং এটি:application/x-zip-compressed
কায়ারাশ

এটি আপনাকে কোনও zipবা rarফাইলের গ্যারান্টি দেয় না । ডাব্লুসি 3 স্পেসিফিকেশন অনুসারে এটিকে ব্যাখ্যা করা হবে: "আমি একটি application/zip| application/x-rar-compressedবিষয়বস্তুর ধরণ পছন্দ করি তবে আপনি যদি এটি সরবরাহ করতে না পারেন তবে application/octet-stream(ফাইল স্ট্রিম )ও ভাল" "
উইল্ট

1
এখানে অন্যান্যের মধ্যে .zip সঙ্গে মূকাভিনয় ধরনের দরকারী তালিকা sitepoint.com/web-foundations/mime-types-complete-list
sstauross

1
কিভাবে বিশ্বে multipart/x-zipসম্ভবত বৈধ হতে পারে? এটি বহু অংশ নয়। সাইটপয়েন্ট তালিকায় অনেকগুলি ভুল মাইমে টাইপ রয়েছে এবং এটি সম্পূর্ণরূপে অনেক দূরে। অফিসিয়াল আইএএনএ মিডিয়া টাইপ রেজিস্ট্রি 100% সম্পূর্ণ নয় (বা এটি সম্ভবত কখনও হবে না)।
সানকাট 2000

35

আপলোডের জন্য:

মাইম টাইপ একজন কর্মকর্তা তালিকা পাওয়া যাবে ইন্টারনেট বরাদ্দ নাম্বার অথরিটি (IANA) । তাদের তালিকার Content-Typeশিরোনাম অনুসারে zipহয় application/zip

rarফাইলগুলির জন্য মিডিয়া প্রকারটি আনুষ্ঠানিকভাবে আইএএনএতে নিবন্ধভুক্ত নয় তবে আনুষ্ঠানিকভাবে সাধারণত ব্যবহৃত মাইম-টাইপ মানapplication/x-rar-compressed

application/octet-streamএর অর্থ হ'ল: "আমি আপনাকে একটি ফাইল স্ট্রিম প্রেরণ করি এবং এই স্ট্রিমের সামগ্রী নির্দিষ্ট করা হয়নি" (সুতরাং এটি সত্য যে এটি একটি zipবা rarফাইলও হতে পারে ) can এই স্ট্রিমের আসল সামগ্রীটি সার্ভারের সনাক্ত করার কথা

দ্রষ্টব্য: আপলোডের জন্য Content-Typeশিরোনামের মাইম টাইপের সেটটিতে নির্ভর করা নিরাপদ নয় । শিরোনামটি ক্লায়েন্টে সেট করা আছে এবং যেকোন র্যান্ডম মানতে সেট করা যায়। পরিবর্তে আপনি সার্ভারে মাইম-টাইপ ফাইল সনাক্ত করতে পিএইচপি ফাইল তথ্য ফাংশন ব্যবহার করতে পারেন ।


ডাউনলোডের জন্য:

আপনি যদি কোনও zipফাইল এবং অন্য কিছু ডাউনলোড করতে চান তবে আপনার কেবলমাত্র একটি একক Acceptশিরোনাম মান সেট করা উচিত । সার্ভারের মধ্যে আপনার সন্তুষ্টি না করতে পারলে কোনও অতিরিক্ত মান সেট ফ্যালব্যাক হিসাবে ব্যবহৃত হবেAccept শিরোনামের অনুরোধ মাইম-টাইপটিতে ।

ডাব্লুসি 3 স্পেসিফিকেশন অনুসারে এটি:

application/zip, application/octet-stream 

হিসাবে ব্যাখ্যা করা হবে: "আমি একটি application/zipমাইম-টাইপ পছন্দ , কিন্তু আপনি যদি এটি সরবরাহ করতে না পারেনapplication/octet-stream (ফাইল স্ট্রিম )ও ভাল fine"

সুতরাং শুধুমাত্র একটি একক:

application/zip

আপনাকে কোনও zipফাইলের গ্যারান্টি দেবে (বা 406 - Not Acceptableসার্ভার আপনার অনুরোধটি পূরণ করতে অক্ষম হলে প্রতিক্রিয়া)।


5

আপনার বিশ্বাস করা উচিত নয় $_FILES['upfile']['mime'], নিজের থেকে MIME টাইপ চেক করুন। সেই উদ্দেশ্যে, আপনি পিএইচপি 5.3.0 হিসাবে ডিফল্টরূপে সক্ষম fileinfoএক্সটেনশন ব্যবহার করতে পারেন ।

  $fileInfo = new finfo(FILEINFO_MIME_TYPE);
  $fileMime = $fileInfo->file($_FILES['upfile']['tmp_name']);
  $validMimes = array( 
    'zip' => 'application/zip',
    'rar' => 'application/x-rar',
  );

  $fileExt = array_search($fileMime, $validMimes, true);
  if($fileExt != 'zip' && $fileExt != 'rar')
    throw new RuntimeException('Invalid file format.');

দ্রষ্টব্য: আপনার এক্সটেনশানটি সক্ষম করতে php.iniএবং আপনার সার্ভারটি পুনরায় চালু করতে ভুলবেন না :

extension=php_fileinfo.dll

0

ইন একটি লিঙ্ক প্রশ্ন , কিছু উদ্দেশ্য সি কোড একটি ফাইল URL এর জন্য MIME প্রকার পেতে হবে। মাইম প্রকারটি পেতে আমি সেই উদ্দেশ্য-সি কোডের উপর ভিত্তি করে একটি সুইফট এক্সটেনশন তৈরি করেছি:

import Foundation
import MobileCoreServices

extension URL {
    var mimeType: String? {
        guard self.pathExtension.count != 0 else {
            return nil
        }

        let pathExtension = self.pathExtension as CFString
        if let preferredIdentifier = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, nil) {
            guard let mimeType = UTTypeCopyPreferredTagWithClass(preferredIdentifier.takeRetainedValue(), kUTTagClassMIMEType) else {
                return nil
            }
            return mimeType.takeRetainedValue() as String
        }

        return nil
    }
}

-2

এক্সটেনশানটিতে কমবেশি তিনটি অক্ষর থাকতে পারে কারণ এর দৈর্ঘ্য নির্বিশেষে কোনও এক্সটেনশনের জন্য নিম্নলিখিত তিনটি অক্ষর পরীক্ষা করবে।

এটা চেষ্টা কর:

$allowedExtensions = array( 'mkv', 'mp3', 'flac' );

$temp = explode(".", $_FILES[$file]["name"]);
$extension = strtolower(end($temp));

if( in_array( $extension, $allowedExtensions ) ) { ///

শেষের পরে সমস্ত অক্ষর পরীক্ষা করার জন্য। '

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.