File pointer manipulation helps you move around inside a file. This lets you read or write at different places without starting over.
File pointer manipulation in 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.
<?php $fp = fopen('file.txt', 'r'); fseek($fp, 10); // Move pointer 10 bytes from start fclose($fp);
<?php $fp = fopen('file.txt', 'r'); fseek($fp, -5, SEEK_END); // Move pointer 5 bytes before end fclose($fp);
<?php $fp = fopen('file.txt', 'r'); $pos = ftell($fp); // Get current pointer position fclose($fp);
<?php $fp = fopen('file.txt', 'r'); rewind($fp); // Move pointer back to start fclose($fp);
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 // 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);
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.
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
fseek() do when working with files?Solution
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.Step 2: Compare with other file functions
Functions like reading or closing files do not move the pointer;fseek()specifically changes the pointer position.Final Answer:
Moves the file pointer to a specified position in the file -> Option BQuick Check:
fseek()moves pointer [OK]
- Confusing fseek() with fread() which reads data
- Thinking fseek() closes the file
- Assuming fseek() deletes the file
Solution
Step 1: Identify correct function and parameters
To move the pointer to the start,fseek($file, 0);moves pointer to position 0 (start).Step 2: Understand other functions
rewind($file);also moves pointer to start but takes only one argument.ftell()returns position, does not move pointer.Final Answer:
fseek($file, 0); -> Option AQuick Check:
fseek with 0 moves to start [OK]
- Using negative offset in fseek() which is invalid
- Passing extra argument to rewind()
- Confusing ftell() as pointer mover
$file = fopen('example.txt', 'r');
fseek($file, 5);
echo ftell($file);What will be the output?
Solution
Step 1: Analyze fseek position
fseek($file, 5);moves the file pointer to position 5 bytes from the start.Step 2: Check ftell output
ftell($file);returns the current position of the file pointer, which is now 5.Final Answer:
5 -> Option DQuick Check:
fseek to 5 then ftell returns 5 [OK]
- Assuming ftell returns 0 always
- Thinking fseek returns file content
- Expecting EOF when pointer is inside file
$file = fopen('data.txt', 'r');
fseek($file, -10);
echo ftell($file);Solution
Step 1: Check fseek offset validity
fseek()does not accept negative offsets from the start (SEEK_SET). Negative values cause an error.Step 2: Validate other parts
fopen('data.txt', 'r')is correct for reading.ftell()works afterfseek(). Pointer is at start by default, not end.Final Answer:
Negative offset in fseek causes error -> Option AQuick Check:
fseek negative offset invalid [OK]
- Using negative offset with SEEK_SET
- Confusing fopen modes
- Thinking ftell fails after fseek
Solution
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.Step 2: Move pointer and write
fseek($file, 9);moves pointer to 10th byte (index 9).fwrite($file, 'X');writes 'X' at that position.Step 3: Check other options
Mode 'w' truncates file, 'r' alone can't write, 'a' appends at end ignoring fseek.Final Answer:
fopen($file, 'r+'); fseek($file, 9); fwrite($file, 'X'); -> Option CQuick Check:
Use 'r+' mode and fseek before fwrite [OK]
- Using 'w' mode which erases file
- Using 'a' mode which always appends
- Not moving pointer before writing
Ready to prove it?
Pass the test and this pattern moves unknown
