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)
touch
(PHP 4, PHP 5)
touch — Setzt die Zugriffs- und Modifikationszeit einer Datei
Beschreibung
$filename
[, int $time = time()
[, int $atime
]] )
Versucht die Zugriffs- und Modifikationszeit der im
filename-Parameter angegebenen Datei auf
time zu setzen.
Beachten Sie, dass die Zugriffszeit unabhängig von der Anzahl der
Parameter immer geändert wird.
Wenn die Datei nicht existiert, wird sie erzeugt.
Parameter-Liste
-
filename -
Der Name der zu ändernden Datei.
-
time -
Die Modifikationszeit. Wenn
timenicht angegeben ist, wird die aktuelle Systemzeit verwendet. -
atime -
Falls angegeben, wird die Zugriffszeit der angegebenen Datei auf
atimegesetzt. Andernfalls wird sie auf den angegebenentime-Parameter gesetzt. Falls beide nicht angegeben wurden, wird die aktuelle Systemzeit verwendet.
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Changelog
| Version | Beschreibung |
|---|---|
| 5.3.0 | Es wurde ermöglicht, die Modifikationszeit eines Verzeichnisses unter Windows zu ändern. |
Beispiele
Beispiel #1 touch()-Beispiel
if (touch($filename)) {
echo $filename . '-Modifikationszeit wurde auf die aktuelle Zeit gesetzt.';
} else {
echo 'Entschuldigung, die Änderung der Modifikationszeit von ' . $filename
' war nicht möglich.';
}
?>
Beispiel #2 Nutzung von touch() mit dem time-Parameter
<?php
// Modifikationszeit (eine Stunde in der Vergangenheit)
$time = time() - 3600;
// Ändern der Datei
if (!touch('eine_datei.txt', $time)) {
echo 'Ein Fehler ist aufgetreten ...';
} else {
echo 'Änderung der Modifikationszeit war erfolgreich';
}
?>
Anmerkungen
Hinweis:
Beachten Sie, dass die zeitliche Auflösung bei verschiedenen Dateisystemen unterschiedlich sein kann.
Vor PHP 5.3.0 war es nicht möglich, die Modifikationszeit eines Verzeichnisses mit dieser Funktion unter Windows zu ändern.
touch
21-May-2007 05:10
31-Mar-2007 06:09
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()); ?>
19-Jul-2006 03:10
Update the access time without updating the modified time:
Unix command: touch -a filename
PHP: touch(filename, date('U', filemtime(filename)), time())
01-Sep-2005 02:09
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.
25-Jul-2005 09:19
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
12-May-2005 12:42
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.
14-Aug-2002 12:31
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;
}
07-Oct-2001 12:41
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
15-May-2001 08:23
$filename = "test.dat";
if (!file_exists($filename)) {
touch($filename); // Create blank file
chmod($filename,0666);
}