Question
Answer and Explanation
PHP can determine multipart content using the $_FILES
and $_POST
superglobal arrays, along with the $_SERVER
variable to examine the content type. Here's how:
1. Checking Content Type:
- The Content-Type
header indicates if the request is a multipart form. In PHP, you can access this header through the $_SERVER['CONTENT_TYPE']
variable. A typical multipart form will have a Content-Type
that includes multipart/form-data
.
- Example:
<?php
$contentType = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '';
if (strpos($contentType, 'multipart/form-data') !== false) {
// It's a multipart form, process accordingly.
} else {
// Not a multipart form.
}
?>
2. Accessing File Data:
- When a form uses enctype="multipart/form-data"
, uploaded files are accessible through the $_FILES
superglobal array. Each file input will have a corresponding entry in $_FILES
with details like name
, type
, tmp_name
, error
, and size
.
- Example to check for a file upload:
<?php
if (isset($_FILES['file_input_name'])) {
$file = $_FILES['file_input_name'];
if ($file['error'] === UPLOAD_ERR_OK) {
// File was uploaded successfully. Process $file.
} else {
// Handle upload error
}
}
?>
3. Accessing other Form Data:
- Regular form fields (e.g., text inputs) are available through the $_POST
array, just as in a regular form submission.
4. Handling Multiple Files:
- If a form allows multiple file uploads (e.g., <input type="file" multiple name="files[]">
), then the $_FILES
array will have a structure that can be iterated through.
- Example handling multiple file uploads:
<?php
if (isset($_FILES['files'])) {
$files = $_FILES['files'];
foreach ($files['error'] as $key => $error) {
if ($error === UPLOAD_ERR_OK) {
$fileData = array(
'name' => $files['name'][$key],
'type' => $files['type'][$key],
'tmp_name' => $files['tmp_name'][$key],
'size' => $files['size'][$key]
);
// Process $fileData
}
}
}
?>
In summary, to determine if a request contains multipart content, check $_SERVER['CONTENT_TYPE']
for multipart/form-data
. Use $_FILES
to access uploaded files and $_POST
for regular form data in PHP. Make sure to validate user inputs, files types and handle possible upload errors.