1) फ़ाइलें अपलोड करना
फ़ाइल इनपुट के लिए सरणी सिंटैक्स का उपयोग करते समय, फ़ाइल अनुक्रमणिका अंतिम कुंजी होती है। $_FILES["file"]["name"]
, उदाहरण के लिए, फ़ाइल नामों की एक सरणी है। i-th फ़ाइल की जानकारी प्राप्त करने के लिए, आपको $_FILES["file"]["name"][$i]
तक पहुंचना होगा , $_FILES["file"]["size"][$i]
&सी.
2) छवियों को फ़ोल्डर में सहेजना
$_FILES
. में कुछ डेटा (जैसे कि नाम) क्लाइंट से आता है, और इसलिए उस पर भरोसा नहीं किया जाना चाहिए (अर्थात, पहले सत्यापित करें)। फ़ाइल नाम
के मामले में , आप realpath
का इस्तेमाल करके शुरुआत कर सकते हैं
यह सत्यापित करने के लिए कि लक्ष्य फ़ाइल पथनाम सुरक्षित है, या basename
का उपयोग करें
या pathinfo
लक्ष्य पथनाम को असेंबल करने से पहले आपूर्ति किए गए नाम के अंतिम घटक को निकालने के लिए।
3) छवि जानकारी को DB में सहेजा जा रहा है
आपके द्वारा दिया गया (अपूर्ण) डेटाबेस स्कीमा ऐसा लगता है कि आप प्रत्येक छवि को एक ही तालिका में दो कॉलम देते हैं। रिलेशनल मॉडल के तहत, कई रिश्तों को एक अलग तालिका के साथ तैयार किया जाता है:
CREATE TABLE images (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`path` VARCHAR(256) NOT NULL,
`description` TEXT,
`member` INT UNSIGNED NOT NULL,
FOREIGN KEY `member` REFERENCES members (`id`) ON DELETE CASCADE ON UPDATE CASCADE -- the image's owner
) Engine=InnoDB;
-- Note: this is a many-to-many relationship
CREATE TABLE ad_images (
`ad` INT UNSIGNED NOT NULL,
`image` INT UNSIGNED NOT NULL,
FOREIGN KEY `ad` REFERENCES ads (`ad_id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY `image` REFERENCES images (id) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE KEY (`ad`, `image`)
) Engine=InnoDB;
अन्यथा, आप zero-one-infinity को तोड़ रहे हैं छवियों की अधिकतम संख्या से कम होने पर नियम और स्थान बर्बाद करना।
अन्य
ध्यान दें कि आप फ़ाइल विवरण फ़ील्ड को आसान बनाने के लिए सरणी सिंटैक्स का उपयोग कर सकते हैं। उन्हें "filedesc[]" नाम दें।
तुलना के लंबे क्रम के बजाय, सरणी लुकअप या पैटर्न मिलान का उपयोग करें।
function isImage($type) {
static $imageTypes = array(
'image/gif'=>1, 'image/jpeg'=>1, 'image/pjpeg'=>1, 'image/png'=>1,
);
return isset($imageTypes[$type]);
/* OR */
return preg_match('%^image/(?:p?jpeg|gif|png)%', $type);
/* OR allow all images */
return preg_match('%^image/%', $type);
}
if (isImage($_FILES["file"]["type"][$idx]) && ($_FILES["file"]["size"][$idx] < 1048600)) {
फ़ाइल प्रकार उन क्लाइंट द्वारा प्रदत्त मानों में से एक है। fileinfo
का उपयोग करना अधिक सुरक्षित होगा
छवि प्रकार प्राप्त करने के लिए।
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (isImage(finfo_file($finfo, $path)) && ($_FILES["file"]["size"][$idx] < 1048600)) {
यहां तक कि अगर फ़ाइल में एक वैध छवि शीर्षलेख है, लेकिन बाकी मान्य नहीं है, तो भी इसे मूर्ख बनाया जा सकता है। आप एक इमेज लाइब्रेरी का उपयोग कर सकते हैं (जैसे GD या ImageMagick) फ़ाइल को सत्यापित करने के लिए जाँच करें कि क्या आप फ़ाइल को सफलतापूर्वक एक छवि के रूप में खोल सकते हैं।