$_FILES for file uploads in PHP - Time & Space Complexity
When handling file uploads in PHP using $_FILES, it's important to understand how the processing time changes as more files are uploaded.
We want to know how the time to handle files grows when the number of uploaded files increases.
Analyze the time complexity of the following code snippet.
// Loop through uploaded files
foreach ($_FILES['userfiles']['tmp_name'] as $index => $tmpName) {
// Move each uploaded file to a new location
move_uploaded_file($tmpName, 'uploads/' . $_FILES['userfiles']['name'][$index]);
}
This code moves each uploaded file from its temporary location to a permanent folder.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each uploaded file and moving it.
- How many times: Once for each file uploaded (depends on number of files).
As the number of files increases, the number of move operations increases linearly.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 files | 10 moves |
| 100 files | 100 moves |
| 1000 files | 1000 moves |
Pattern observation: The work grows directly with the number of files.
Time Complexity: O(n)
This means the time to process uploads grows in a straight line as you add more files.
[X] Wrong: "Processing multiple files happens instantly or all at once regardless of count."
[OK] Correct: Each file requires its own move operation, so more files mean more work and more time.
Understanding how file upload handling scales helps you write efficient code and explain your reasoning clearly in interviews.
"What if we processed files in parallel instead of one by one? How would the time complexity change?"
Practice
$_FILES superglobal in PHP store?Solution
Step 1: Understand the purpose of
$_FILES$_FILESis a special PHP variable that holds details about files uploaded through a form.Step 2: Compare with other options
User session data is stored in$_SESSION, database details are not stored here, and server variables are in$_SERVER.Final Answer:
Information about files uploaded via an HTML form -> Option CQuick Check:
$_FILES= Uploaded file info [OK]
- Confusing $_FILES with $_SESSION
- Thinking $_FILES holds server info
- Assuming $_FILES stores form text inputs
userfile?Solution
Step 1: Recall the structure of $_FILES
Each uploaded file's info is stored in an array with keys like 'name', 'type', 'tmp_name', 'error', and 'size'.Step 2: Identify the correct key for the original filename
The key for the original filename is 'name', not 'filename' or 'file_name'.Final Answer:
$_FILES['userfile']['name'] -> Option DQuick Check:
Filename key = 'name' [OK]
- Using 'filename' or 'file_name' instead of 'name'
- Confusing keys with other $_FILES elements
- Trying to access $_POST for file names
if ($_FILES['pic']['error'] === 0) {
echo $_FILES['pic']['name'];
} else {
echo 'Upload failed';
}Solution
Step 1: Check the error code for the uploaded file
An error code of 0 means the upload was successful with no errors.Step 2: Output the original filename
Since error is 0, the code echoes the original filename stored in$_FILES['pic']['name'], which is 'photo.jpg'.Final Answer:
photo.jpg -> Option AQuick Check:
Error 0 means success, so filename prints [OK]
- Assuming error 0 means failure
- Printing error code instead of filename
- Not checking if 'pic' index exists
if ($_FILES['upload']['error'] == 0) {
move_uploaded_file($_FILES['upload']['name'], 'uploads/' . $_FILES['upload']['name']);
echo 'File saved';
} else {
echo 'Error uploading';
}Solution
Step 1: Understand move_uploaded_file parameters
The first parameter must be the temporary file path stored intmp_name, not the original filename.Step 2: Identify the incorrect usage
The code incorrectly uses$_FILES['upload']['name']as the source file, which is wrong and causes failure.Final Answer:
Using 'name' instead of 'tmp_name' in move_uploaded_file -> Option BQuick Check:
move_uploaded_file needs tmp_name as source [OK]
- Using original filename instead of temp file path
- Ignoring error codes before moving files
- Not validating file size or type
if (/* condition here */) {
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
echo 'Upload successful';
} else {
echo 'Upload failed';
}Solution
Step 1: Check for no upload errors
The error code must be exactly 0 to confirm no errors during upload.Step 2: Check file size limit
The file size must be less than 2MB (2 * 1024 * 1024 = 2097152 bytes).Step 3: Combine conditions correctly
Both conditions must be true, so use logical AND (&&) with strict equality and less-than size check.Final Answer:
if ($_FILES['file']['error'] === 0 && $_FILES['file']['size'] < 2097152) -> Option AQuick Check:
Error 0 and size < 2MB = correct check [OK]
- Using || instead of && for conditions
- Checking error != 0 instead of === 0
- Confusing size units or limits
Ready to prove it?
Pass the test and this pattern moves unknown
