PHP 7.0.6 Released

fclose

(PHP 4, PHP 5, PHP 7)

fcloseCloses an open file pointer

Description

bool fclose ( resource $handle )

The file pointed to by handle is closed.

Parameters

handle

The file pointer must be valid, and must point to a file successfully opened by fopen() or fsockopen().

Return Values

Returns TRUE on success or FALSE on failure.

Examples

Example #1 A simple fclose() example

<?php

$handle 
fopen('somefile.txt''r');

fclose($handle);

?>

See Also

  • fopen() - Opens file or URL
  • fsockopen() - Open Internet or Unix domain socket connection

User Contributed Notes

jgotti
3 years ago
In case you have some trouble to properly disconnect some client streams opened with stream_socket_server / stream_select you should give a try to stream_socket_shutdown.

<?php stream_socket_shutdown($clientStream,STREAM_SHUT_RDWR); ?>
tom dot vom dot berg at online dot de
2 years ago
if you want to daysychain a filehandle through some functions and each function is allowed to close th file you might look in a following function first, if the handle is still valid.

Opening a file, there often will be used a code like

if (!$fh = fopen($filename, $mode)) return false;

But if you possably have closed the file and you want to check that, a smililar statement would not work.

DOES NOT WORK:   if (!$fh)  end_of_chain();

use beter: if (is_resource($fh))   end_of_chain();
jricher at jacquesricher dot com
11 years ago
It is a GOOD_THING to check the return value from fclose(), as some operating systems only flush file output on close, and can, therefore, return an error from fclose(). You can catch severe data-eating errors by doing this.

I learned this the hard way.
James R. Steel
10 years ago
In response to kumar mcmillan 'gotcha' note below, we get a different result on a W2K machine:

<?php
$file_pointer
= fopen('textfile.dat', 'r');
fclose($file_pointer);
echo
'$file_pointer is resource = ' . (is_resource($file_pointer) ? 'true': 'false');
?>

output:
$file_pointer is resource = false
sineld at sineld dot com
9 years ago
Do not forget, if you are going to read the contents of the file which you have already written via fwrite() or else you have to close the file first.
mark at markvange * com
9 years ago
It is very important to make sure you clear any incoming packets out of the incoming buffer using fread() or some equivalent.  Although you can call fclose() the socket does not actually shut down until the inbound packets have been cleared.  This can lead to some confusion.
daniel7 dot martinez at ps dot ge dot com
14 years ago
Generally, it's always a good idea to close a file when you're done with it. It's very easy for something to go wrong and corrupt a file that hasn't been closed properly. If you're concerned about efficiency, the overhead is negligible.
kit dot lester at lycos dot co dot uk
10 years ago
fclose() also clears any locks on the file, so if another process was being kept waiting for the lock to be cleared, fclose()ing will allow the other process to continue.

[Another "just-in-case" reason to habitually fclose() all files as soon as practical!]
crrodriguez at opensuse dot org
5 years ago
Note that since PHP 5.3.2 fclose() no longer unlock open file descriptors at shutdown.
kumar mcmillan
11 years ago
gotcha:

<?php

$file_pointer
= fopen('data.dat', 'r');
fclose($file_pointer);

echo
'$file_pointer is resource = ' . (is_resource($file_pointer) ? 'true': 'false');

?>

output:
$file_pointer is resource = true
williamhamby at williamhamby dot net
10 years ago
Trying to understand how 'end foreach' and 'endwhile' differ, I've encountered a problem I can't solve by myself. The following is a fairly easy stock portfolio script. Everything works, except at the end where I want to calculate the average of the gains as represented by $gain[$i].

<?php
$quantity
="3";
$stocks=array("iso","grn","bdgr.pk");
$buydates=array("3 jan 2006","1 feb 2006","3 apr 2006");
$prices=array("0.32","0.20","0.95");
$recommends=array("hold","strong buy","buy");
$i=0;
echo
"<tr>";
echo
"\n<th align='center'>ticker</th>";
echo
"\n<th align='center'>buy date</th>";
echo
"\n<th align='center'>price $</th>";
echo
"\n<th align='center'>recommend</th>";
echo
"\n<th align='center'>value $</th>";
echo
"\n<th align='center'>change %</th>\n</tr>\n";
foreach(
$stocks as $stock) {
$fp=fopen("http://","r");
$data=fgetcsv($fp,1000,",");
$values=$data[1];
echo
"<tr>\n<td align='center'>".$stock."</td>";
echo
"\n<td align='center'>".$buydates[$i]."</td>";
echo
"\n<td align='center'>".$prices[$i]."</td>";
echo
"\n<td align='center'>".$recommends[$i]."</td>";
echo
"\n<td align='center'>".$values."</td>\n<td align='center'>";
echo
$gain[$i]=round(((($values-$prices[$i])/$prices[$i])*100),2);
echo
"</td>\n</tr>";
fclose ($fp);
$i++;
}
echo
"\n<tr>\n<td align='center'>".$gain[$i]."<td>\n</tr>\n";
?>

Help?
To Top