PHP Academy · पाठ

फ़ाइल अपलोड संभालना

_FILES सुपरग्लोबल का उपयोग करके अपलोड की गई फ़ाइलों को सुरक्षित रूप से प्रोसेस करें

पाठ 4, कुल 4 में से13 चरण

फ़ाइल अपलोड संभालना, CoddyKit पर PHP Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह PHP Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

PHP फ़ाइल अपलोड का परिचय

PHP $_FILES सुपरग्लोबल के माध्यम से फ़ाइल अपलोड संभालता है। फ़ॉर्म में method="POST" और enctype="multipart/form-data" का उपयोग होना चाहिए।

HTML अपलोड फ़ॉर्म

एकल और अनेक फ़ाइल अपलोड के लिए HTML फ़ॉर्म की व्यवस्था:

<!-- Single file -->
<form method="POST" action="upload.php"
      enctype="multipart/form-data">
    <input type="file" name="document">
    <button>Upload</button>
</form>

<!-- Multiple files -->
<form method="POST" enctype="multipart/form-data">
    <input type="file" name="photos[]" multiple>
    <button>Upload All</button>
</form>

$_FILES की संरचना

प्रत्येक अपलोड की गई फ़ाइल के लिए $_FILES में पाँच प्रविष्टियाँ होती हैं:

<?php
$file = $_FILES['document'];

echo $file['name'];      // original name: report.pdf
echo $file['type'];      // browser-reported MIME: application/pdf
echo $file['tmp_name'];  // server temp path: /tmp/phpXXXXXX
echo $file['error'];     // error code: 0 = UPLOAD_ERR_OK
echo $file['size'];      // file size in bytes

अपलोड त्रुटि कोड

संसाधित करने से पहले हमेशा $file['error'] जाँचें:

<?php
$errorMessages = [
    UPLOAD_ERR_INI_SIZE   => 'Exceeds upload_max_filesize in php.ini',
    UPLOAD_ERR_FORM_SIZE  => 'Exceeds MAX_FILE_SIZE in form',
    UPLOAD_ERR_PARTIAL    => 'Only partially uploaded',
    UPLOAD_ERR_NO_FILE    => 'No file uploaded',
    UPLOAD_ERR_NO_TMP_DIR => 'Missing temp folder',
    UPLOAD_ERR_CANT_WRITE => 'Failed to write to disk',
    UPLOAD_ERR_EXTENSION  => 'PHP extension stopped upload',
];

$err = $_FILES['doc']['error'];
if ($err !== UPLOAD_ERR_OK) {
    die($errorMessages[$err] ?? 'Unknown error');
}

फ़ाइल प्रकार का सुरक्षित सत्यापन

ब्राउज़र द्वारा दिए गए MIME प्रकार पर कभी भरोसा न करें — वास्तविक फ़ाइल सामग्री से इसकी पुष्टि करें:

<?php
$tmp  = $_FILES['image']['tmp_name'];
$allowed = ['image/jpeg', 'image/png', 'image/webp'];

// Check real MIME type from file content
$realMime = mime_content_type($tmp);

if (!in_array($realMime, $allowed)) {
    die('Invalid file type: ' . $realMime);
}

फ़ाइल आकार का सत्यापन

सर्वर पर आकार की सीमाएँ लागू करें, भले ही HTML फ़ॉर्म में MAX_FILE_SIZE छिपा हुआ फ़ील्ड मौजूद हो:

<?php
$maxBytes = 5 * 1024 * 1024;  // 5MB
$size     = $_FILES['video']['size'];

if ($size > $maxBytes) {
    $mb = round($size / 1024 / 1024, 2);
    die("File too large: {$mb}MB (max 5MB)");
}

is_uploaded_file और move_uploaded_file

यह पुष्टि करने के लिए कि फ़ाइल HTTP अपलोड के माध्यम से आई है और उसे सुरक्षित रूप से स्थानांतरित करने के लिए हमेशा इन दोनों फ़ंक्शन का उपयोग करें:

<?php
$tmp  = $_FILES['photo']['tmp_name'];
$dest = '/var/www/uploads/' . basename($_FILES['photo']['name']);

if (!is_uploaded_file($tmp)) {
    die('Not an uploaded file — possible attack');
}

if (!move_uploaded_file($tmp, $dest)) {
    die('Failed to move uploaded file');
}

echo 'Upload saved to: ' . $dest;

सुरक्षित फ़ाइल नाम बनाना

डायरेक्टरी ट्रैवर्सल और ओवरराइट हमलों को रोकने के लिए यादृच्छिक फ़ाइल नाम बनाएँ:

<?php
$originalName = $_FILES['doc']['name'];
$ext          = strtolower(pathinfo($originalName, PATHINFO_EXTENSION));

$allowedExts = ['jpg', 'jpeg', 'png', 'pdf'];
if (!in_array($ext, $allowedExts)) {
    die('File type not allowed');
}

$safeName = bin2hex(random_bytes(16)) . '.' . $ext;
$dest     = '/var/www/uploads/' . $safeName;

move_uploaded_file($_FILES['doc']['tmp_name'], $dest);

अनेक फ़ाइल अपलोड संभालना

name="photos[]" का उपयोग करने पर $_FILES में सारणियाँ होती हैं — उन पर पुनरावृत्ति करें:

<?php
$files = $_FILES['photos'];
$count = count($files['name']);

for ($i = 0; $i < $count; $i++) {
    if ($files['error'][$i] !== UPLOAD_ERR_OK) continue;
    
    $tmp  = $files['tmp_name'][$i];
    $ext  = pathinfo($files['name'][$i], PATHINFO_EXTENSION);
    $dest = '/uploads/' . uniqid() . '.' . strtolower($ext);
    
    move_uploaded_file($tmp, $dest);
    echo "Saved: $dest" . PHP_EOL;
}

php.ini की अपलोड सेटिंग

फ़ाइल अपलोड को प्रभावित करने वाले प्रमुख php.ini निर्देश:

  • file_uploads = On — अपलोड सक्षम करता है
  • upload_max_filesize = 8M — एकल फ़ाइल का अधिकतम आकार
  • post_max_size = 32M — अधिकतम POST बॉडी आकार (यह upload_max_filesize से बड़ा होना चाहिए)
  • max_file_uploads = 20 — प्रत्येक अनुरोध में अधिकतम फ़ाइलें

अपलोड के बाद इमेज का आकार बदलना

अपलोड के बाद इमेज का आकार बदलने के लिए GD लाइब्रेरी का उपयोग करें:

<?php
function resizeImage(string $src, string $dst, int $maxW): void {
    [$w, $h, $type] = getimagesize($src);
    $ratio   = $maxW / $w;
    $newH    = (int) ($h * $ratio);
    $srcImg  = imagecreatefromjpeg($src);
    $dstImg  = imagecreatetruecolor($maxW, $newH);
    imagecopyresampled($dstImg, $srcImg, 0,0,0,0, $maxW, $newH, $w, $h);
    imagejpeg($dstImg, $dst, 90);
    imagedestroy($srcImg);
    imagedestroy($dstImg);
}

त्वरित जाँच

अपलोड की गई फ़ाइल को उसके अंतिम गंतव्य पर सुरक्षित रूप से स्थानांतरित करने के लिए कौन-सा PHP फ़ंक्शन आवश्यक है?

पुनरावलोकन: फ़ाइल अपलोड

अपलोड संभालने की जाँच-सूची:

  • फ़ॉर्म में method=POST enctype=multipart/form-data का उपयोग होना चाहिए
  • $_FILES['field']['error'] === UPLOAD_ERR_OK जाँचें
  • mime_content_type() से वास्तविक MIME प्रकार का सत्यापन करें
  • सर्वर पर फ़ाइल आकार का सत्यापन करें
  • move_uploaded_file() का उपयोग करें — rename/copy का नहीं
  • टकराव रोकने के लिए यादृच्छिक फ़ाइल नाम बनाएँ
शुरुआत निःशुल्क

एआई शिक्षक के साथ PHP सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
49
पाठ
195

अक्सर पूछे जाने वाले प्रश्न

क्या “फ़ाइल अपलोड संभालना” पाठ निःशुल्क है?

हाँ—“फ़ाइल अपलोड संभालना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और PHP Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“फ़ाइल अपलोड संभालना” में मैं क्या सीखूँगा?

_FILES सुपरग्लोबल का उपयोग करके अपलोड की गई फ़ाइलों को सुरक्षित रूप से प्रोसेस करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ PHP Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या PHP Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर PHP Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“फ़ाइल अपलोड संभालना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस PHP Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर PHP Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. PHP से फ़ाइलें पढ़ना
  2. फ़ाइलों में लिखना और जोड़ना
  3. डायरेक्टरी के साथ काम करना
  4. फ़ाइल अपलोड संभालना
← PHP Academy पर वापस जाएँ