This is in response to alvaro at demogracia dot com
Yes, I found that out and have had to wrap it with is_file:
<?php
if(is_file("$file")) {
unlink("$file");
}
?>
unlink
(PHP 4, PHP 5)
unlink — Deletes a file
Description
bool unlink
( string $filename
[, resource $context
] )
Deletes filename . Similar to the Unix C unlink() function.
Parameters
- filename
-
Path to the file.
- context
-
Note: Context support was added with PHP 5.0.0. For a description of contexts, refer to Stream Functions.
Return Values
Returns TRUE on success or FALSE on failure.
ChangeLog
| Version | Description |
|---|---|
| 5.0.0 | As of PHP 5.0.0 unlink() can also be used with some URL wrappers. Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support unlink(). |
unlink
southsentry at yahoo dot com
31-Aug-2008 08:23
31-Aug-2008 08:23
PD
06-Aug-2008 03:07
06-Aug-2008 03:07
I have been working on some little tryout where a backup file was created before modifying the main textfile. Then when an error is thrown, the main file will be deleted (unlinked) and the backup file is returned instead.
Though, I have been breaking my head for about an hour on why I couldn't get my persmissions right to unlink the main file.
Finally I knew what was wrong: because I was working on the file and hadn't yet closed the file, it was still in use and ofcourse couldn't be deleted :)
So I thought of mentoining this here, to avoid others of making the same mistake:
<?php
// First close the file
fclose($fp);
// Then unlink :)
unlink($somefile);
?>
alvaro at demogracia dot com
24-Jun-2008 11:18
24-Jun-2008 11:18
It's not mentioned in the manual but unlink() raises a warning when the operation fails.
ayor ATTTTT ayor.biz
20-Dec-2007 04:02
20-Dec-2007 04:02
ggarciaa's post above has already one small error, closedir has to be used even if $DeleteMe is false
<?php
// ggarciaa at gmail dot com (04-July-2007 01:57)
// I needed to empty a directory, but keeping it
// so I slightly modified the contribution from
// stefano at takys dot it (28-Dec-2005 11:57)
// A short but powerfull recursive function
// that works also if the dirs contain hidden files
//
// $dir = the target directory
// $DeleteMe = if true delete also $dir, if false leave it alone
function SureRemoveDir($dir, $DeleteMe) {
if(!$dh = @opendir($dir)) return;
while (false !== ($obj = readdir($dh))) {
if($obj=='.' || $obj=='..') continue;
if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
}
closedir($dh);
if ($DeleteMe){
@rmdir($dir);
}
}
//SureRemoveDir('EmptyMe', false);
//SureRemoveDir('RemoveMe', true);
?>
james at NOSPAM dot telserco dot com
29-Sep-2007 05:10
29-Sep-2007 05:10
Cheap and dirty example for cleaning a directory of files so many seconds old.
function cleantmp() {
$seconds_old = 3600;
$directory = "/var/tmp";
if( !$dirhandle = @opendir($directory) )
return;
while( false !== ($filename = readdir($dirhandle)) ) {
if( $filename != "." && $filename != ".." ) {
$filename = $directory. "/". $filename;
if( @filemtime($filename) < (time()-$seconds_old) )
@unlink($filename);
}
}
}
rahulnvaidya at gmail dot com
03-Aug-2007 12:36
03-Aug-2007 12:36
ggarciaa's post above has one small error, it will ignore file and directory strings that are evaluated as false (ie. "0")
Fixed code is below (false !==)
<?php
// ggarciaa at gmail dot com (04-July-2007 01:57)
// I needed to empty a directory, but keeping it
// so I slightly modified the contribution from
// stefano at takys dot it (28-Dec-2005 11:57)
// A short but powerfull recursive function
// that works also if the dirs contain hidden files
//
// $dir = the target directory
// $DeleteMe = if true delete also $dir, if false leave it alone
function SureRemoveDir($dir, $DeleteMe) {
if(!$dh = @opendir($dir)) return;
while (false !== ($obj = readdir($dh))) {
if($obj=='.' || $obj=='..') continue;
if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
}
if ($DeleteMe){
closedir($dh);
@rmdir($dir);
}
}
//SureRemoveDir('EmptyMe', false);
//SureRemoveDir('RemoveMe', true);
?>
ggarciaa at gmail dot com
04-Jul-2007 09:00
04-Jul-2007 09:00
<?php
// ggarciaa at gmail dot com (04-July-2007 01:57)
// I needed to empty a directory, but keeping it
// so I slightly modified the contribution from
// stefano at takys dot it (28-Dec-2005 11:57)
// A short but powerfull recursive function
// that works also if the dirs contain hidden files
//
// $dir = the target directory
// $DeleteMe = if true delete also $dir, if false leave it alone
function SureRemoveDir($dir, $DeleteMe) {
if(!$dh = @opendir($dir)) return;
while (($obj = readdir($dh))) {
if($obj=='.' || $obj=='..') continue;
if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
}
if ($DeleteMe){
closedir($dh);
@rmdir($dir);
}
}
//SureRemoveDir('EmptyMe', false);
//SureRemoveDir('RemoveMe', true);
?>
torch at torchsdomain dot com
22-Nov-2006 10:27
22-Nov-2006 10:27
Here is simple function that will find and remove all files (except "." ones) that match the expression ($match, "*" as wildcard) under starting directory ($path) and all other directories under it.
function rfr($path,$match){
static $deld = 0, $dsize = 0;
$dirs = glob($path."*");
$files = glob($path.$match);
foreach($files as $file){
if(is_file($file)){
$dsize += filesize($file);
unlink($file);
$deld++;
}
}
foreach($dirs as $dir){
if(is_dir($dir)){
$dir = basename($dir) . "/";
rfr($path.$dir,$match);
}
}
return "$deld files deleted with a total size of $dsize bytes";
}
paul at pes-systems dot net
16-Aug-2006 08:27
16-Aug-2006 08:27
A work around for the Permission Denied problem.
I used ftp_connect() then ftp_delete() to erase files which unlink could not erase due to permision problems
bishop
05-Jun-2005 10:30
05-Jun-2005 10:30
<?php
/**
* rm() -- Vigorously erase files and directories.
*
* @param $fileglob mixed If string, must be a file name (foo.txt), glob pattern (*.txt), or directory name.
* If array, must be an array of file names, glob patterns, or directories.
*/
function rm($fileglob)
{
if (is_string($fileglob)) {
if (is_file($fileglob)) {
return unlink($fileglob);
} else if (is_dir($fileglob)) {
$ok = rm("$fileglob/*");
if (! $ok) {
return false;
}
return rmdir($fileglob);
} else {
$matching = glob($fileglob);
if ($matching === false) {
trigger_error(sprintf('No files match supplied glob %s', $fileglob), E_USER_WARNING);
return false;
}
$rcs = array_map('rm', $matching);
if (in_array(false, $rcs)) {
return false;
}
}
} else if (is_array($fileglob)) {
$rcs = array_map('rm', $fileglob);
if (in_array(false, $rcs)) {
return false;
}
} else {
trigger_error('Param #1 must be filename or glob pattern, or array of filenames or glob patterns', E_USER_ERROR);
return false;
}
return true;
}
?>
jchase at solidmark dot com
21-May-2005 08:05
21-May-2005 08:05
[Editor's note: A suggestion for a work-around was submitted by argistof at gmail dot com: You can use the recursive option (see man chmod) when chmodding, for instance 'chmod 777 directory/ -R'. Be aware though, this will change the permissions of all files and folders in the diectory.]
Just a note which you probably all know, but I didn't, and it might save another poor sap some unnecessary time:
I was doing unlink() and fopen() on a file and got a permission denied error, even after chmoding the file to 0777.
The folder that contains the file must ALSO have write permission. Took a headache to find this out.
Hope this helps someone :)
ashley at semantic dot org
02-Apr-2005 01:50
02-Apr-2005 01:50
Actually you should use "@unlink" rather than testing with file_exists. The former is atomic, whereas the latter can break if you can't guarantee only one process will try to delete a given file at a time.
dagski_AT_gmail_DOT_com
07-Feb-2005 08:19
07-Feb-2005 08:19
before you could unlink a file created which uses a handle e.g.,
$handle = sqlite('temp.db');
unset($handle); first befofe
unlink($handle);
to avoide permission denied error.
chris at vibenewmedia dot com
14-Sep-2004 08:54
14-Sep-2004 08:54
To delete all files of a particular extension, or infact, delete all with wildcard, a much simplar way is to use the glob function. Say I wanted to delete all jpgs .........
<?php
foreach (glob("*.jpg") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
unlink($filename);
}
?>
pc AT newagelab DOT com DOT ua
08-Sep-2004 06:22
08-Sep-2004 06:22
To delete files using wildcards:
<?
function delfile($str)
{
foreach(glob($str) as $fn) {
unlink($fn);
}
}
?>
