Ritesh Kumar
Ritesh Kumar

Reputation: 75

Write and read from the same file- PHP

I am trying to write to a file and then read the data from the same file. But sometimes I am facing this issue that the file reading process is getting started even before the file writing gets finished. How can I solve this issue ? How can i make file writing process finish before moving ahead?

// writing to file

$string= <12 kb of specific data which i need>;
$filename.="/ttc/";
$filename.="datasave.html";
if($fp = fopen($filename, 'w')) 
{
    fwrite($fp, $string);
    fclose($fp);
}

// writing to the file

$handle = fopen($filename, "r")  ;
$datatnc = fread($handle, filesize($filename));
$datatnc = addslashes($datatnc);
fclose($handle);

Upvotes: 1

Views: 6231

Answers (3)

atomCode
atomCode

Reputation: 902

The reason it does not work is because when you are done writing a string to the file the file pointer points to the end of the file so later when you try to read the same file with the same file pointer there is nothing more to read. All you have to do is rewind the pointer to the beginning of the file. Here is an example:

<?php
$fileName = 'test_file';
$savePath = "tmp/tests/" . $fileName;
//create file pointer handle
$fp = fopen($savePath, 'r+');
fwrite($fp, "Writing and Reading with same fopen handle!");
//Now rewind file pointer to start reading
rewind($fp);
//this will output "Writing and Reading with same fopen handle!"
echo fread($fp, filesize($savePath));
fclose($fp);
 ?>

Here is more info on the rewind() method http://php.net/manual/en/function.rewind.php

Upvotes: 3

Ritesh Kumar
Ritesh Kumar

Reputation: 75

I have mentioned the URL through which i got the solution. I implemented the same. If you want me to copy the text from that link then here it is :

$file = fopen("test.txt","w+");

    // exclusive lock

if (flock($file,LOCK_EX))
{
    fwrite($file,"Write something");
    // release lock
    flock($file,LOCK_UN);
}
else
{
    echo "Error locking file!";
}

fclose($file);

Upvotes: 1

v1rus32
v1rus32

Reputation: 109

Use fclose after writing to close the file pointer and then fopen again to open it.

Upvotes: -1

Related Questions