Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PHP और MySQL फ़ाइलों को कैसे अपलोड और डाउनलोड करें

यह ट्यूटोरियल दर्शाता है कि आप .zip, .pdf, .docx, .ppt सहित विभिन्न स्वरूपों की फ़ाइलों को कैसे अपलोड कर सकते हैं, साथ ही साथ छवि फ़ाइलों को PHP का उपयोग करके हमारे सर्वर पर एक फ़ोल्डर में संग्रहीत करने के लिए अपलोड कर सकते हैं।

हम अपलोड की गई फ़ाइलों का नाम और संबंधित जानकारी जैसे फ़ाइल का नाम, आकार और डेटाबेस तालिका में डाउनलोड की संख्या भी रिकॉर्ड करेंगे।

एक नया PHP प्रोजेक्ट फ़ोल्डर बनाएं और इसे फ़ाइल-अपलोड-डाउनलोड कॉल करें। इस फ़ोल्डर के अंदर एक सबफ़ोल्डर बनाएं, जिसे अपलोड कहा जाता है (यह वह जगह है जहां हमारी अपलोड की गई फ़ाइलें संग्रहीत की जाएंगी),  और एक फ़ाइल जिसे index.php कहा जाता है।

index.php वह जगह है जहां हम अपना फाइल अपलोड फॉर्म बनाएंगे। इसे खोलें और इसके अंदर यह कोड डालें:

index.php:

<?php include 'filesLogic.php';?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="style.css">
    <title>Files Upload and Download</title>
  </head>
  <body>
    <div class="container">
      <div class="row">
        <form action="index.php" method="post" enctype="multipart/form-data" >
          <h3>Upload File</h3>
          <input type="file" name="myfile"> <br>
          <button type="submit" name="save">upload</button>
        </form>
      </div>
    </div>
  </body>
</html>

यह एक बहुत ही सरल रूप है जो हमारी फ़ाइल के लिए केवल इनपुट फ़ील्ड और एक अपलोड बटन लेता है।

हेड सेक्शन में, हम अपने फॉर्म को कुछ स्टाइल प्रदान करने के लिए अपनी style.css फाइल से लिंक कर रहे हैं। उस फाइल को हमारे एप्लिकेशन के रूट में बनाएं और इसमें यह सीएसएस कोड जोड़ें:

style.css:

form {
  width: 30%;
  margin: 100px auto;
  padding: 30px;
  border: 1px solid #555;
}
input {
  width: 100%;
  border: 1px solid #f1e1e1;
  display: block;
  padding: 5px 10px;
}
button {
  border: none;
  padding: 10px;
  border-radius: 5px;
}
table {
  width: 60%;
  border-collapse: collapse;
  margin: 100px auto;
}
th,
td {
  height: 50px;
  vertical-align: center;
  border: 1px solid black;
}

index.php के शीर्ष पर, हम filesLogic.php फ़ाइल शामिल कर रहे हैं। यह वह फ़ाइल है जिसमें हमारी सबमिट की गई फ़ाइल प्राप्त करने और उसे अपलोड फ़ोल्डर में सहेजने के साथ-साथ डेटाबेस में फ़ाइल जानकारी संग्रहीत करने के सभी तर्क शामिल हैं। चलिए अब यह फाइल बनाते हैं।

filesLogic.php:

<?php
// connect to the database
$conn = mysqli_connect('localhost', 'root', '', 'file-management');

// Uploads files
if (isset($_POST['save'])) { // if save button on the form is clicked
    // name of the uploaded file
    $filename = $_FILES['myfile']['name'];

    // destination of the file on the server
    $destination = 'uploads/' . $filename;

    // get the file extension
    $extension = pathinfo($filename, PATHINFO_EXTENSION);

    // the physical file on a temporary uploads directory on the server
    $file = $_FILES['myfile']['tmp_name'];
    $size = $_FILES['myfile']['size'];

    if (!in_array($extension, ['zip', 'pdf', 'docx'])) {
        echo "You file extension must be .zip, .pdf or .docx";
    } elseif ($_FILES['myfile']['size'] > 1000000) { // file shouldn't be larger than 1Megabyte
        echo "File too large!";
    } else {
        // move the uploaded (temporary) file to the specified destination
        if (move_uploaded_file($file, $destination)) {
            $sql = "INSERT INTO files (name, size, downloads) VALUES ('$filename', $size, 0)";
            if (mysqli_query($conn, $sql)) {
                echo "File uploaded successfully";
            }
        } else {
            echo "Failed to upload file.";
        }
    }
}

इस फ़ाइल के शीर्ष पर, हम एक डेटाबेस से जुड़ रहे हैं लेकिन हमने इसे अभी तक नहीं बनाया है। चलिए अब करते हैं।

फ़ाइल-प्रबंधन नामक एक नया डेटाबेस बनाएँ। इस डेटाबेस के अंतर्गत, फ़ाइलें नामक एक तालिका बनाएं और उसे निम्न फ़ील्ड दें.

  • आईडी - आईएनटी
  • नाम - वचर (255) 
  • आकार - INT
  • डाउनलोड

अब अपने ब्राउज़र में index.php फाइल को ओपन करें। मेरे लिए, मैं http://localhost/file-upload-download/download.php पर जाऊँगा।

फ़ाइल इनपुट फ़ील्ड पर क्लिक करें और अपलोड करने के लिए अपनी मशीन से किसी भी फ़ाइल का चयन करें।

<ब्लॉकक्वॉट>

नोट:आपके php कॉन्फ़िगरेशन के आधार पर, आपकी फ़ाइल अपलोड करने में विफल हो सकती है यदि आकार आपकी php.ini फ़ाइल में निर्धारित upload_max_filesize मान से अधिक है। आप इस जानकारी को हमेशा अपनी php.ini फ़ाइल में कॉन्फ़िगर कर सकते हैं। post_max_size और upload_max_filesize के मान बढ़ाएँ।

अपनी फ़ाइल का चयन करने के बाद, आप अपलोड बटन पर क्लिक कर सकते हैं। यदि सब कुछ ठीक रहा, तो आपकी फ़ाइल आपके प्रोजेक्ट के अपलोड फ़ोल्डर में अपलोड कर दी जाएगी और डेटाबेस में फ़ाइल तालिका में फ़ाइल नाम, आकार और डाउनलोड गणना वाले एक नया रिकॉर्ड बनाया जाएगा।

अब हमारी फाइल अपलोड हो गई है। यह पुष्टि करने के लिए कि यह सफल रहा, आप अपने अपलोड फ़ोल्डर और डेटाबेस तालिका की जांच कर सकते हैं। आइए इसे प्रदर्शित करें ताकि उपयोगकर्ता इसे देख सके और इसे डाउनलोड करने के लिए उस पर क्लिक कर सके। सबसे पहले, हमें डेटाबेस से फ़ाइल जानकारी प्राप्त करने की आवश्यकता है।

FilesLogic.php खोलें और कोड की इन 3 पंक्तियों को उस लाइन के ठीक नीचे जोड़ें जहाँ हम डेटाबेस से जुड़ते हैं:

<?php
// connect to database
$conn = mysqli_connect('localhost', 'root', '', 'file-management');

$sql = "SELECT * FROM files";
$result = mysqli_query($conn, $sql);

$files = mysqli_fetch_all($result, MYSQLI_ASSOC);

यह डेटाबेस से सभी फाइलों की जानकारी का चयन करता है और इसे $files नामक एक सरणी चर पर सेट करता है।

अब हमारे एप्लिकेशन के रूट फोल्डर में downloads.php नाम की एक फाइल बनाएं और उसके अंदर इस कोड को जोड़ें:

downloads.php:

<?php include 'filesLogic.php';?>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <link rel="stylesheet" href="style.css">
  <title>Download files</title>
</head>
<body>

<table>
<thead>
    <th>ID</th>
    <th>Filename</th>
    <th>size (in mb)</th>
    <th>Downloads</th>
    <th>Action</th>
</thead>
<tbody>
  <?php foreach ($files as $file): ?>
    <tr>
      <td><?php echo $file['id']; ?></td>
      <td><?php echo $file['name']; ?></td>
      <td><?php echo floor($file['size'] / 1000) . ' KB'; ?></td>
      <td><?php echo $file['downloads']; ?></td>
      <td><a href="downloads.php?file_id=<?php echo $file['id'] ?>">Download</a></td>
    </tr>
  <?php endforeach;?>

</tbody>
</table>

</body>
</html>

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

FilesLogic.php को फिर से खोलें और इस कोड को फाइल के अंत में जोड़ें:

filesLogic.php:


// Downloads files
if (isset($_GET['file_id'])) {
    $id = $_GET['file_id'];

    // fetch file to download from database
    $sql = "SELECT * FROM files WHERE id=$id";
    $result = mysqli_query($conn, $sql);

    $file = mysqli_fetch_assoc($result);
    $filepath = 'uploads/' . $file['name'];

    if (file_exists($filepath)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . basename($filepath));
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize('uploads/' . $file['name']));
        readfile('uploads/' . $file['name']);

        // Now update downloads count
        $newCount = $file['downloads'] + 1;
        $updateQuery = "UPDATE files SET downloads=$newCount WHERE id=$id";
        mysqli_query($conn, $updateQuery);
        exit;
    }

}

जब हम फाइलों को सूचीबद्ध कर रहे थे, तो प्रत्येक डाउनलोड बटन (या बल्कि, डाउनलोड लिंक) में file_id नामक एक पैरामीटर जुड़ा हुआ था। तो जब आप किसी फ़ाइल के डाउनलोड लिंक पर क्लिक करते हैं, तो उस फ़ाइल की आईडी filesLogic.php पेज पर भेज दी जाती है और कोड के इस टुकड़े से पकड़ लिया जाता है जिसे हमने अभी जोड़ा है।

कोड तब file_id पैरामीटर का उपयोग करके डेटाबेस से उस विशेष फ़ाइल जानकारी को प्राप्त करता है और फिर फ़ाइल जानकारी को $file नामक एक चर में संग्रहीत करता है। हमारी फ़ाइल के पूर्ण पथ के साथ PHP की file_exists() विधि का उपयोग एक तर्क के रूप में हम जांचते हैं कि फ़ाइल वास्तव में हमारे अपलोड फ़ोल्डर में मौजूद है। फिर हम कुछ हेडर सेट करने के लिए आगे बढ़ते हैं और अंत में PHP में readFile() फ़ंक्शन का उपयोग करके उपयोगकर्ता को फ़ाइल के साथ प्रतिक्रिया देते हैं।

फ़ाइल डाउनलोड होने के बाद, हम डेटाबेस में उस विशेष फ़ाइल के लिए डाउनलोड की संख्या को अपडेट करते हैं।

निष्कर्ष

फ़ाइल अपलोड और डाउनलोड के साथ यह इसके बारे में है। आप शानदार PHP एप्लिकेशन बनाने के लिए इसे और कस्टमाइज़ कर सकते हैं। फॉलो करने के लिए बहुत बहुत धन्यवाद। कृपया मुझे बताएं कि आप इस लेख के बारे में नीचे टिप्पणी अनुभाग में क्या सोचते हैं, अगर आप कृपया।

अच्छा समय बिताएं!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL उच्च LIMIT ऑफ़सेट क्वेरी को धीमा क्यों करता है?

  2. शामिल हों बनाम उप-क्वेरी

  3. उबंटू पर MySQL वर्कबेंच कैसे स्थापित करें

  4. अन्य तालिका मान के आधार पर MySQL अद्यतन तालिका

  5. प्रमाणीकरण प्लगइन 'caching_sha2_password' लोड नहीं किया जा सकता