Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Filesystem Functions : touch

touch

Sets access and modification time of file (PHP 4, PHP 5)
bool touch ( string filename [, int time [, int atime]] )

Example 672. touch() example

<?php
if (touch($FileName)) {
   echo
"$FileName modification time has been changed to present time";
} else {
   echo
"Sorry, could not change modification time of $FileName";
}
?>

Related Examples ( Source code ) » touch



Code Examples / Notes » touch

charles belov

Update the access time without updating the modified time:
Unix command: touch -a filename
PHP: touch(filename, date('U', filemtime(filename)), time())


emilebosch

To spare you ppl couple of hours of valuable time, you can only TOUCH a file that you own! Usually PHP is *nobody*
Warm regards,
Emile Bosch


seocab

The script for modifying the access time without modifying the modified time is overly complicated:
<? touch($filename, date('U', filemtime($filename)), time()); ?>
Since filemtime returns a UNIX timestamp, there is no need to call date('U') so the script could be simplified to:
<? touch($filename,filemtime($filename),time()); ?>


rf_public

Note: the script to touch a file you don't own will change it's owner so ensure permissions are correct or you could lose access to it

feathern

Neat little script that will give you a list of all modified files in a certain folder after a certain date:
$filelist = Array();
$filelist = list_dir("d:\\my_folder");
for($i=0;$i<count($filelist);$i++){
$test = Array();
$test = explode("/",date("m/d/Y",filemtime($filelist[$i])));
//example of files that are later then
//06/17/2002
if(($test[2] > 2001) && ($test[1] > 16) && ($test[0] > 5)){
echo $filelist[$i]."\r\n";
}
clearstatcache();
}
function list_dir($dn){
if($dn[strlen($dn)-1] != '\\') $dn.='\\';
static $ra = array();
$handle = opendir($dn);
while($fn = readdir($handle)){
if($fn == '.' || $fn == '..') continue;
if(is_dir($dn.$fn)) list_dir($dn.$fn.'\\');
else $ra[] = $dn.$fn;
}
closedir($handle);
return $ra;
}


glen

In unix on the command-line, you can touch files you don't own - but like other comments on this page state - PHP's built in touch won't work.
I simple alternative (on unix):
<?php
   function touch_it_good($filename)
   {
       exec("touch {$filename}");
   }
?>


spam

If you're going to go around deleting (unlinking) files
that you don't own just in order to change the modification
time on the file, you darn well better chown() the file
back to it's original ownership after you are done and
chmod() it back to it's correct permissions.  Otherwise
you will almost certainly break things.  Additionally the
code listed for touch()ing a file you don't own should
set the file creation time back to it's original time if
what is wanted is to just change the modification time.
Also, the code listed will break things if there is an i/o
error such as disk full or too many files in the directory.
Here's how the code SHOULD be written:
Create the new file FIRST, rather than last, with a different
name such as $file.tmp.
Read the ownership, permissions, and creation time of the old file.
Set permissions and creation time of the new file the same as the old.
Rename the new file to the name of the old.
chown() the new file to the user that owned the file it's replacing.
Please be careful adding to the documentation if you've
never taken programming 101.


guy

Here's a little workaround that allows the PHP user to touch a file it doesn't own:
<?php
$target_file = "/path/to/file/filename.txt"; //system filepath to your file
$file_content = implode("",file($target_file));
@unlink($target_file);
if($savetofile = fopen($target_file, "w")) {
fputs($savetofile, $file_content);
fclose($savetofile);
}
$new_date = strtotime("23 April 2005"); // set the required date timestamp here
touch($target_file,$new_date);

?>
Of course, PHP needs to have write access to the folder containing the file you want to touch, but that should be easy to arrange.


ilrazziatore85

Feathern wrote a little script for fetching files from a directory after a certain date.
However the if statement (line 8) should be:
if(($test[2] > 2002) || (($test[2] = 2002) && ($test[0] > 6)) || (($test[2] = 2002) && ($test[0] = 6) && ($test[1] > 17))){
echo $filelist[$i]."\r\n";
}
Otherwise the script won't fetch lots of files it should.
(In the example given, it should fetch all the files created after 06/17/2002, but the original script would miss files created 03/18/2003 or 11/01/2004)


master

$filename = "test.dat";
if (!file_exists($filename)) {
 touch($filename); // Create blank file
 chmod($filename,0666);
}


Change Language


Follow Navioo On Twitter
basename
chgrp
chmod
chown
clearstatcache
copy
delete
dirname
disk_free_space
disk_total_space
diskfreespace
fclose
feof
fflush
fgetc
fgetcsv
fgets
fgetss
file_exists
file_get_contents
file_put_contents
file
fileatime
filectime
filegroup
fileinode
filemtime
fileowner
fileperms
filesize
filetype
flock
fnmatch
fopen
fpassthru
fputcsv
fputs
fread
fscanf
fseek
fstat
ftell
ftruncate
fwrite
glob
is_dir
is_executable
is_file
is_link
is_readable
is_uploaded_file
is_writable
is_writeable
lchgrp
lchown
link
linkinfo
lstat
mkdir
move_uploaded_file
parse_ini_file
pathinfo
pclose
popen
readfile
readlink
realpath
rename
rewind
rmdir
set_file_buffer
stat
symlink
tempnam
tmpfile
touch
umask
unlink
eXTReMe Tracker