Bird
Raised Fist0
PHPprogramming~5 mins

File pointer manipulation in PHP

Choose your learning style10 modes available
Introduction

File pointer manipulation helps you move around inside a file. This lets you read or write at different places without starting over.

You want to skip the first few lines of a file and read from the middle.
You need to update a specific part of a file without rewriting the whole file.
You want to check the current position in a file while reading or writing.
You want to go back and re-read or overwrite some data in a file.
You want to jump to the end of a file to add more content.
Syntax
PHP
<?php
// Move file pointer
fseek(resource $handle, int $offset, int $whence = SEEK_SET): int

// Get current position
ftell(resource $handle): int

// Rewind pointer to start
rewind(resource $handle): void
?>

fseek moves the pointer to a new position.

ftell tells you where the pointer is now.

rewind moves pointer back to the start.

Examples
Move pointer 10 bytes from the start of the file.
PHP
<?php
$fp = fopen('file.txt', 'r');
fseek($fp, 10); // Move pointer 10 bytes from start
fclose($fp);
Move pointer 5 bytes before the end of the file.
PHP
<?php
$fp = fopen('file.txt', 'r');
fseek($fp, -5, SEEK_END); // Move pointer 5 bytes before end
fclose($fp);
Get the current position of the pointer.
PHP
<?php
$fp = fopen('file.txt', 'r');
$pos = ftell($fp); // Get current pointer position
fclose($fp);
Reset pointer to the beginning of the file.
PHP
<?php
$fp = fopen('file.txt', 'r');
rewind($fp); // Move pointer back to start
fclose($fp);
Sample Program

This program writes 'Hello World!' to a file, then moves the pointer to the word 'World' and overwrites it with 'PHP'. Finally, it reads and prints the updated content.

PHP
<?php
// Open file for reading and writing
$fp = fopen('example.txt', 'w+');

// Write some text
fwrite($fp, "Hello World!");

// Move pointer to 6th byte (start of 'World')
fseek($fp, 6);

// Overwrite 'World' with 'PHP'
fwrite($fp, "PHP");

// Move pointer back to start
rewind($fp);

// Read the whole content
$content = fread($fp, filesize('example.txt'));

// Close file
fclose($fp);

// Show result
print($content);
OutputSuccess
Important Notes

Remember to open the file with the correct mode to allow reading and writing.

Using fseek with SEEK_SET moves pointer from the start, SEEK_CUR from current position, and SEEK_END from the end.

Always close files with fclose to save changes and free resources.

Summary

File pointer lets you jump to any place in a file to read or write.

Use fseek to move the pointer, ftell to check position, and rewind to go back to start.

This helps update files efficiently without reading or writing everything again.

Practice

(1/5)
1. What does the PHP function fseek() do when working with files?
easy
A. Closes the file after reading
B. Moves the file pointer to a specified position in the file
C. Reads the entire content of the file
D. Deletes the file from the system

Solution

  1. Step 1: Understand the purpose of fseek()

    fseek() is used to move the file pointer to a specific position inside the file, allowing you to read or write from that point.
  2. Step 2: Compare with other file functions

    Functions like reading or closing files do not move the pointer; fseek() specifically changes the pointer position.
  3. Final Answer:

    Moves the file pointer to a specified position in the file -> Option B
  4. Quick Check:

    fseek() moves pointer [OK]
Hint: Remember: fseek jumps pointer position in file [OK]
Common Mistakes:
  • Confusing fseek() with fread() which reads data
  • Thinking fseek() closes the file
  • Assuming fseek() deletes the file
2. Which of the following is the correct syntax to move the file pointer to the beginning of a file in PHP?
easy
A. fseek($file, 0);
B. fseek($file, -1);
C. rewind($file, 0);
D. ftell($file, 0);

Solution

  1. Step 1: Identify correct function and parameters

    To move the pointer to the start, fseek($file, 0); moves pointer to position 0 (start).
  2. Step 2: Understand other functions

    rewind($file); also moves pointer to start but takes only one argument. ftell() returns position, does not move pointer.
  3. Final Answer:

    fseek($file, 0); -> Option A
  4. Quick Check:

    fseek with 0 moves to start [OK]
Hint: Use fseek with 0 to jump to file start [OK]
Common Mistakes:
  • Using negative offset in fseek() which is invalid
  • Passing extra argument to rewind()
  • Confusing ftell() as pointer mover
3. Consider the following PHP code snippet:
$file = fopen('example.txt', 'r');
fseek($file, 5);
echo ftell($file);

What will be the output?
medium
A. Error
B. 0
C. EOF
D. 5

Solution

  1. Step 1: Analyze fseek position

    fseek($file, 5); moves the file pointer to position 5 bytes from the start.
  2. Step 2: Check ftell output

    ftell($file); returns the current position of the file pointer, which is now 5.
  3. Final Answer:

    5 -> Option D
  4. Quick Check:

    fseek to 5 then ftell returns 5 [OK]
Hint: ftell shows pointer after fseek moves it [OK]
Common Mistakes:
  • Assuming ftell returns 0 always
  • Thinking fseek returns file content
  • Expecting EOF when pointer is inside file
4. What is wrong with this PHP code snippet?
$file = fopen('data.txt', 'r');
fseek($file, -10);
echo ftell($file);
medium
A. Negative offset in fseek causes error
B. fopen mode 'r' is incorrect
C. ftell cannot be used after fseek
D. File pointer is automatically at end

Solution

  1. Step 1: Check fseek offset validity

    fseek() does not accept negative offsets from the start (SEEK_SET). Negative values cause an error.
  2. Step 2: Validate other parts

    fopen('data.txt', 'r') is correct for reading. ftell() works after fseek(). Pointer is at start by default, not end.
  3. Final Answer:

    Negative offset in fseek causes error -> Option A
  4. Quick Check:

    fseek negative offset invalid [OK]
Hint: fseek offset must be zero or positive [OK]
Common Mistakes:
  • Using negative offset with SEEK_SET
  • Confusing fopen modes
  • Thinking ftell fails after fseek
5. You want to update the 10th byte in a file without reading the whole file. Which sequence of PHP functions correctly moves the pointer and writes a character 'X' at that position?
hard
A. fopen($file, 'w'); fseek($file, 10); fwrite($file, 'X');
B. fopen($file, 'r'); rewind($file); fwrite($file, 'X');
C. fopen($file, 'r+'); fseek($file, 9); fwrite($file, 'X');
D. fopen($file, 'a'); fseek($file, 10); fwrite($file, 'X');

Solution

  1. Step 1: Choose correct mode to read and write

    Mode 'r+' opens file for reading and writing without truncating it, allowing pointer movement and writing.
  2. Step 2: Move pointer and write

    fseek($file, 9); moves pointer to 10th byte (index 9). fwrite($file, 'X'); writes 'X' at that position.
  3. Step 3: Check other options

    Mode 'w' truncates file, 'r' alone can't write, 'a' appends at end ignoring fseek.
  4. Final Answer:

    fopen($file, 'r+'); fseek($file, 9); fwrite($file, 'X'); -> Option C
  5. Quick Check:

    Use 'r+' mode and fseek before fwrite [OK]
Hint: Use 'r+' mode and fseek to update file byte [OK]
Common Mistakes:
  • Using 'w' mode which erases file
  • Using 'a' mode which always appends
  • Not moving pointer before writing
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