Bird
Raised Fist0
PHPprogramming~10 mins

Directory operations in PHP - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Directory operations
Open Directory
↓
Read Entry
↓
Is Entry valid?
No→Close Directory
Yes↓
Process Entry
↓
Read Next Entry
↩Back to Is Entry valid?
This flow shows how PHP opens a directory, reads each entry one by one, processes it, and finally closes the directory.
Execution Sample
PHP
<?php
$dir = opendir('testdir');
while (($file = readdir($dir)) !== false) {
  echo "$file\n";
}
closedir($dir);
?>
This code opens a directory named 'testdir', reads each file or folder inside it, prints their names, and then closes the directory.
Execution Table
StepActionFunction CallReturned ValueOutput/Effect
1Open directory 'testdir'opendir('testdir')resource (directory handle)Directory handle stored in $dir
2Read first entryreaddir($dir)'file1.txt'Output: file1.txt
3Read second entryreaddir($dir)'file2.txt'Output: file2.txt
4Read third entryreaddir($dir)'.'Output: . (current directory)
5Read fourth entryreaddir($dir)'..'Output: .. (parent directory)
6Read fifth entryreaddir($dir)falseNo more entries, loop ends
7Close directoryclosedir($dir)trueDirectory closed
💡 readdir returns false when no more entries are left, ending the loop
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
$dirnullresourceresourceresourceresourceresourceresource
$filenull'file1.txt''file2.txt''.''..'falsefalse
Key Moments - 3 Insights
Why does readdir return '.' and '..' entries?
These represent the current directory ('.') and the parent directory ('..'). They are normal entries in every directory and appear in the execution_table rows 4 and 5.
What happens when readdir returns false?
It means there are no more entries to read, so the while loop stops. This is shown in execution_table row 6.
Why do we need to call closedir?
closedir frees the resource and closes the directory handle. It is good practice to call it after finishing reading, as shown in execution_table row 7.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of $file at step 3?
A'.'
B'file2.txt'
C'file1.txt'
D'..'
💡 Hint
Check the 'Returned Value' column at step 3 in the execution_table.
At which step does the loop stop reading entries?
AStep 6
BStep 4
CStep 5
DStep 7
💡 Hint
Look for when readdir returns false in the execution_table.
If we forget to call closedir, what happens?
AThe program will crash immediately.
BThe directory entries won't be read.
CThe directory handle remains open, possibly wasting resources.
DThe loop will never end.
💡 Hint
Refer to the explanation in key_moments about closedir and execution_table step 7.
Concept Snapshot
PHP Directory Operations:
- Use opendir('path') to open a directory.
- Use readdir(handle) in a loop to read entries.
- readdir returns '.' and '..' for current and parent dirs.
- Loop ends when readdir returns false.
- Always call closedir(handle) to free resources.
Full Transcript
This visual trace shows how PHP handles directory operations step-by-step. First, opendir opens the directory and returns a handle. Then, readdir reads each entry one by one, including special entries '.' and '..'. Each entry is printed. When no more entries exist, readdir returns false, ending the loop. Finally, closedir closes the directory handle to free resources. Variables $dir and $file change as the program runs, with $file holding each entry name or false when done. Remember to close directories to avoid resource leaks.

Practice

(1/5)
1. Which PHP function is used to create a new directory?
easy
A. mkdir()
B. rmdir()
C. opendir()
D. closedir()

Solution

  1. Step 1: Understand directory creation functions

    In PHP, mkdir() is the function designed to create new directories.
  2. Step 2: Differentiate from other directory functions

    rmdir() removes directories, opendir() opens directories, and closedir() closes them.
  3. Final Answer:

    mkdir() -> Option A
  4. Quick Check:

    Create directory = mkdir() [OK]
Hint: Create folders with mkdir() function in PHP [OK]
Common Mistakes:
  • Confusing mkdir() with rmdir()
  • Using opendir() to create folders
  • Trying to create folder without mkdir()
2. Which of the following is the correct syntax to remove an empty directory named temp in PHP?
easy
A. delete('temp');
B. remove_dir('temp');
C. rmdir('temp');
D. rm('temp');

Solution

  1. Step 1: Identify the correct function for removing directories

    PHP uses rmdir() to remove empty directories.
  2. Step 2: Check syntax correctness

    The syntax rmdir('temp'); correctly removes the directory named 'temp'. Other options are not valid PHP functions.
  3. Final Answer:

    rmdir('temp'); -> Option C
  4. Quick Check:

    Remove empty folder = rmdir() [OK]
Hint: Use rmdir('foldername') to delete empty folders [OK]
Common Mistakes:
  • Using non-existent functions like remove_dir()
  • Trying to delete non-empty folders with rmdir() without clearing
  • Syntax errors like missing quotes or semicolons
3. What will be the output of the following PHP code?
$dir = 'myfolder';
if (is_dir($dir)) {
  $handle = opendir($dir);
  while (($file = readdir($handle)) !== false) {
    echo $file . ' ';
  }
  closedir($handle);
} else {
  echo 'Directory not found';
}
medium
A. Syntax error
B. Only files inside 'myfolder' without '.' and '..'
C. Directory not found
D. List of all files and folders inside 'myfolder' including '.' and '..'

Solution

  1. Step 1: Check if directory exists

    The code uses is_dir() to check if 'myfolder' exists. If it does, it proceeds to open it.
  2. Step 2: Read directory contents with readdir()

    The readdir() function reads all entries including special entries '.' (current directory) and '..' (parent directory). These are echoed with spaces.
  3. Final Answer:

    List of all files and folders inside 'myfolder' including '.' and '..' -> Option D
  4. Quick Check:

    readdir() lists all entries including '.' and '..' [OK]
Hint: readdir() returns '.' and '..' entries by default [OK]
Common Mistakes:
  • Assuming '.' and '..' are excluded automatically
  • Not checking if directory exists before reading
  • Forgetting to close directory handle
4. Consider this PHP code snippet:
$dir = 'testdir';
if (mkdir($dir)) {
  echo 'Created';
} else {
  echo 'Failed';
}
rmdir($dir);

What is the main issue if the directory testdir already exists?
medium
A. mkdir() will fail and echo 'Failed', and rmdir() will fail to remove the directory
B. mkdir() will fail and echo 'Failed', but rmdir() will still remove the directory
C. mkdir() will fail and echo 'Failed', and rmdir() will remove the directory anyway
D. mkdir() will overwrite the existing directory

Solution

  1. Step 1: Behavior of mkdir() when directory exists

    If testdir already exists, mkdir() returns false and echoes 'Failed'.
  2. Step 2: Behavior of rmdir() on existing directory

    Since the directory exists, rmdir() will attempt to remove it. If the directory is empty and permissions allow, it will succeed. Otherwise, it will fail.
  3. Final Answer:

    mkdir() will fail and echo 'Failed', but rmdir() will still remove the directory -> Option B
  4. Quick Check:

    mkdir() fails if exists; rmdir() removes empty directory [OK]
Hint: mkdir() fails if folder exists; rmdir() needs empty folder [OK]
Common Mistakes:
  • Assuming mkdir() overwrites existing folders
  • Expecting rmdir() to always succeed
  • Not checking if directory is empty before rmdir()
5. You want to list all files in a directory docs but skip the special entries . and ... Which PHP code snippet correctly does this?
hard
A. if (is_dir('docs')) { $dh = opendir('docs'); while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..') { echo $file . ' '; } } closedir($dh); }
B. if (is_dir('docs')) { $dh = opendir('docs'); while (($file = readdir($dh))) { echo $file . ' '; } closedir($dh); }
C. foreach (scandir('docs') as $file) { echo $file . ' '; }
D. if (is_dir('docs')) { $dh = opendir('docs'); while (($file = readdir($dh)) !== false) { echo $file . ' '; } closedir($dh); }

Solution

  1. Step 1: Understand how to skip '.' and '..'

    The special entries '.' and '..' appear in directory listings and must be explicitly skipped.
  2. Step 2: Analyze each code snippet

    if (is_dir('docs')) { $dh = opendir('docs'); while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..') { echo $file . ' '; } } closedir($dh); } checks if the file is not '.' or '..' before echoing. foreach (scandir('docs') as $file) { echo $file . ' '; } uses scandir() but does not skip special entries.
  3. Final Answer:

    The snippet using if ($file != '.' && $file != '..') -> Option A
  4. Quick Check:

    Skip '.' and '..' with if check inside readdir() loop [OK]
Hint: Use if ($file != '.' && $file != '..') to skip special entries [OK]
Common Mistakes:
  • Not skipping '.' and '..' entries
  • Using scandir() without filtering special entries
  • Forgetting to check for false in readdir() loop
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard