PHP fprintf() Function – Complete Guide with Examples
What is fprintf() in PHP?
The fprintf() function in PHP writes formatted data to a file or an output stream, similar to printf(), but instead of displaying output, it writes to a file or resource.
📌 Use cases:
✔ Writing formatted text into files (logs, reports, CSV files).
✔ Sending structured output to streams or sockets.
✔ Formatting log entries with timestamps.
Syntax of fprintf()
int fprintf(resource $stream, string $format, mixed ...$values)
🔹 Parameters:
$stream→ A file handle or resource where data will be written.$format→ A string containing format specifiers (%s,%d, etc.).$values→ The values to be inserted into the format string.
🔹 Return Value:
- Returns the number of characters written on success.
- Returns false on failure.
Example: Writing Formatted Data to a File
<?php
$file = fopen("output.txt", "w");
if ($file) {
fprintf($file, "Name: %s, Age: %d\n", "John Doe", 25);
fclose($file);
echo "Data written to file.";
} else {
echo "Failed to open file.";
}
?>
✅ Output (in output.txt):
Name: John Doe, Age: 25 📌 How it works?
- Opens
output.txtin write mode (w). fprintf()writes"John Doe"and25into a structured string.- Closes the file using
fclose().
Example: Writing Log Entries with Timestamps
<?php
$logFile = fopen("log.txt", "a"); // Open in append mode
if ($logFile) {
fprintf($logFile, "[%s] ERROR: %s\n", date("Y-m-d H:i:s"), "Database connection failed!");
fclose($logFile);
echo "Log entry added.";
} else {
echo "Failed to open log file.";
}
?>
✅ Output (log.txt):
[2025-02-12 14:30:45] ERROR: Database connection failed! 📌 Why use fprintf() here?
- Efficient logging with timestamps.
- Avoids manual concatenation of strings.
- Uses append mode (
a) to prevent overwriting logs.
Example: Creating a CSV File Using fprintf()
<?php
$file = fopen("users.csv", "w");
if ($file) {
fprintf($file, "ID,Name,Email\n"); // CSV header
fprintf($file, "%d,%s,%s\n", 1, "Alice", "alice@example.com");
fprintf($file, "%d,%s,%s\n", 2, "Bob", "bob@example.com");
fclose($file);
echo "CSV file created.";
} else {
echo "Failed to open file.";
}
?>
✅ Output (users.csv):
ID,Name,Email 1,Alice,alice@example.com 2,Bob,bob@example.com 📌 Why use fprintf() here?
- Automates structured CSV file creation.
- Ensures consistent formatting.
Writing to the PHP Output Stream (php://stdout)
<?php
fprintf(STDOUT, "Hello, %s!\n", "PHP Developer");
?>
✅ Output (CLI terminal):
Hello, PHP Developer! 📌 Why use STDOUT?
- Writes directly to command-line output.
- Useful for debugging CLI scripts.
Handling Errors with fprintf()
Example: Writing to a Non-Writable File
<?php
$file = fopen("/system/protected.txt", "w"); // Restricted file path
if ($file) {
fprintf($file, "This won't work!");
fclose($file);
} else {
echo "Error: Cannot open file for writing.";
}
?>
✅ Output (if permission denied):
Error: Cannot open file for writing. 📌 Best Practices:
- Check file permissions before writing.
- Handle errors to prevent script failure.
Best Practices for Using fprintf()
✅ 1. Always Close Files
Use fclose($file); to release resources after writing.
✅ 2. Use a (append) Mode for Logs
Prevents overwriting logs when writing new entries.
✅ 3. Check File Permissions
Ensure your script has write access before attempting to write.
✅ 4. Use STDOUT for CLI Scripts
Great for debugging and command-line output.
✅ 5. Format Strings Properly
Use:
%sfor strings%dfor integers%ffor floating-point numbers
Alternative Functions to fprintf()
| Function | Description |
|---|---|
printf() | Formats and outputs a string to the screen. |
sprintf() | Formats a string and returns it. |
file_put_contents() | Writes a string to a file without formatting. |
fwrite() | Writes raw data to a file without formatting. |
📌 Use fprintf() when formatting is required before writing to a file or stream.
When to Use fprintf()
📌 Use fprintf() when:
✔ Writing formatted output to files or streams.
✔ Storing structured logs, reports, or CSV files.
✔ Using PHP CLI scripts with STDOUT.
⚠️ Avoid if:
❌ You only need to print to the screen → Use printf().
❌ You don’t need formatting → Use fwrite().