PHP: fopen to create folders

The fopen() function cannot be used to create directories. This is because fopen() only works with files, not folders. However, you can create directories first using mkdir() and then use fopen() to work with files inside those directories.

Why fopen() Cannot Create Directories

The fopen() function is specifically designed for file operations. When you try to open a file in a non-existent directory, fopen() will fail and return false.

Creating Directories Before Using fopen()

Before using fopen(), you should check if the directory exists using is_dir() and create it with mkdir() if necessary −

<?php
$filename = '/path/to/file.txt';
$dirname = dirname($filename);

// Check if directory exists, create if not
if (!is_dir($dirname)) {
    mkdir($dirname, 0755, true);
}

// Now safely use fopen
$file = fopen($filename, 'w');
if ($file) {
    fwrite($file, "Hello World!");
    fclose($file);
    echo "File created successfully!";
} else {
    echo "Failed to create file.";
}
?>

Parameters Explained

Function Parameter Description
dirname() $filename Returns the parent directory path
mkdir() $dirname Directory path to create
0755 File permissions (rwxr-xr-x)
true Create parent directories recursively

Complete Working Example

Here's a practical example that creates nested directories and then creates a file −

<?php
$filepath = 'data/logs/2024/app.log';
$directory = dirname($filepath);

// Create directory structure recursively
if (!is_dir($directory)) {
    if (mkdir($directory, 0755, true)) {
        echo "Directory created: $directory<br>";
    } else {
        echo "Failed to create directory<br>";
        exit;
    }
}

// Create and write to file
$file = fopen($filepath, 'w');
if ($file) {
    fwrite($file, "Log entry: " . date('Y-m-d H:i:s') . "<br>");
    fclose($file);
    echo "File created at: $filepath<br>";
} else {
    echo "Failed to create file<br>";
}
?>

Conclusion

While fopen() cannot create directories, combining it with mkdir() and dirname() allows you to safely create directory structures before file operations. Always use the recursive flag true with mkdir() to create nested directories automatically.

Updated on: 2026-03-15T08:47:22+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements