আমি একটি সাধারণ পিএইচপি আপলোড স্ক্রিপ্ট বিকাশ করছি এবং ব্যবহারকারীরা কেবল জিপ এবং আরএআর ফাইলগুলি আপলোড করতে পারবেন।
আমার কি MIME প্রকারগুলি পরীক্ষা করতে হবে $_FILES[x][type]
? (একটি সম্পূর্ণ তালিকা দয়া করে)
ধন্যবাদ..
আমি একটি সাধারণ পিএইচপি আপলোড স্ক্রিপ্ট বিকাশ করছি এবং ব্যবহারকারীরা কেবল জিপ এবং আরএআর ফাইলগুলি আপলোড করতে পারবেন।
আমার কি MIME প্রকারগুলি পরীক্ষা করতে হবে $_FILES[x][type]
? (একটি সম্পূর্ণ তালিকা দয়া করে)
ধন্যবাদ..
উত্তর:
মুক্তিযোদ্ধা, কিয়ারাশ এবং স্যাম ভ্লোবার্গের উত্তর:
.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
application/x-zip-compressed
zip
বা rar
ফাইলের গ্যারান্টি দেয় না । ডাব্লুসি 3 স্পেসিফিকেশন অনুসারে এটিকে ব্যাখ্যা করা হবে: "আমি একটি application/zip
| application/x-rar-compressed
বিষয়বস্তুর ধরণ পছন্দ করি তবে আপনি যদি এটি সরবরাহ করতে না পারেন তবে application/octet-stream
(ফাইল স্ট্রিম )ও ভাল" "
multipart/x-zip
সম্ভবত বৈধ হতে পারে? এটি বহু অংশ নয়। সাইটপয়েন্ট তালিকায় অনেকগুলি ভুল মাইমে টাইপ রয়েছে এবং এটি সম্পূর্ণরূপে অনেক দূরে। অফিসিয়াল আইএএনএ মিডিয়া টাইপ রেজিস্ট্রি 100% সম্পূর্ণ নয় (বা এটি সম্ভবত কখনও হবে না)।
মাইম টাইপ একজন কর্মকর্তা তালিকা পাওয়া যাবে ইন্টারনেট বরাদ্দ নাম্বার অথরিটি (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
সার্ভার আপনার অনুরোধটি পূরণ করতে অক্ষম হলে প্রতিক্রিয়া)।
আপনার বিশ্বাস করা উচিত নয় $_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
ইন একটি লিঙ্ক প্রশ্ন , কিছু উদ্দেশ্য সি কোড একটি ফাইল 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
}
}
এক্সটেনশানটিতে কমবেশি তিনটি অক্ষর থাকতে পারে কারণ এর দৈর্ঘ্য নির্বিশেষে কোনও এক্সটেনশনের জন্য নিম্নলিখিত তিনটি অক্ষর পরীক্ষা করবে।
এটা চেষ্টা কর:
$allowedExtensions = array( 'mkv', 'mp3', 'flac' );
$temp = explode(".", $_FILES[$file]["name"]);
$extension = strtolower(end($temp));
if( in_array( $extension, $allowedExtensions ) ) { ///
শেষের পরে সমস্ত অক্ষর পরীক্ষা করার জন্য। '