20'C 흐림
서울 강남구
bool touch ( string $filename [, int $time= time() [, int $atime ]] )
(PHP 4, PHP 5)
이 함수는 파일 액세스, 수정시간을 강제로 수정하며, time 이나 atime 인자를 사용하지 않을 경우 현재 시간으로 설정합니다.
<?php
// 액세스한 시간을 한 시간 전으로 되돌립니다.
$time = time() - 3600;
if(!touch('test.php', $time)) {
echo '수정 실패...';
}else{
echo '수정 완료...';
}
?>
<?php
if (touch('test.php')) {
echo '수정 완료';
} else {
echo '수정 실패';
}
?>
<?php
// 1초를 지연합니다.
touch('test.php');
echo filemtime('index.php')."<br />n"; // 결과: 1309248181
clearstatcache();
sleep(1);
// 1초를 지연합니다.
touch('test.php');
echo filemtime('index.php')."<br />n"; // 결과: 1309248182
clearstatcache();
sleep(1);
// 3초를 지연합니다.
touch('test.php');
echo filemtime('index.php')."<br />n"; // 결과: 1309248183
clearstatcache();
sleep(3);
// 2초를 지연합니다.
touch('test.php');
echo filemtime('index.php')."<br />n"; // 결과: 1309248186
clearstatcache();
sleep(2);
touch('test.php');
echo filemtime('index.php')."<br />n"; // 결과: 1309248188
clearstatcache();
?>
참고로 filectime 함수는 파일 변경시간을, filemtime 함수는 수정시간을 정수로 가져옵니다.
<?php
echo filectime ('test.php')."<br />n"; // 결과: 1309249648
clearstatcache();
sleep(1);
echo filemtime ('test.php')."<br />n"; // 결과: 1309249648
clearstatcache();
sleep(1);
// 파일을 수정합니다.
$fp = fopen('test.php', 'a');
if(is_resource($fp)){
fwrite($fp, 'test');
fclose($fp);
}
// 강제 변경합니다.
touch('test.php');
echo filemtime ('test.php')."<br />n"; // 결과: 1309249683
clearstatcache();
sleep(1);
echo filemtime ('test.php')."<br />n"; // 결과: 1309249683
clearstatcache();
sleep(1);
echo filectime ('test.php')."<br />n"; // 결과: 1309249683
clearstatcache();
sleep(1);
?>
물론 액세스한 시간이나 기타 정보를 가져 올 수 있는 stat 함수도 있습니다. 이 함수는 다음 표의 정보를 배열로 가져옵니다.
배열 키 | 설 명 |
---|---|
dev | device number. 함수명: fstat() |
ino | inode number. 함수명: lstat(), fstat() |
mode | inode 보호 모드. 함수명: lstat(), fstat() |
nlink | 링크 번호. 함수명: fstat() |
uid | 소유자 사용자 id. 함수명: fstat() |
gid | 소유자 그룹 id. 함수명: fstat() |
rdev | 디바이스 타입 |
size | 파일 크기. 함수명: lstat(), fstat() |
atime | 엑세스 시간, 타임스탬프. 함수명: lstat(), fstat() |
mtime | 수정 시간, 타임스탬프. 함수명: lstat(), fstat() |
ctime | 변경 시간, 타임스탬프. 함수명: lstat(), fstat() |
blksize | 최적의 블럭 크기. 함수명: fstat() |
blocks | 할당된 블럭의 수. |
<?php
$info = stat('test.php');
print_r($info);
/*
결과:
Array
(
[0] => 2066
...
[dev] => 2066
[ino] => 203029047
[mode] => 33279
[nlink] => 1
[uid] => 2696
[gid] => 500
[rdev] => 0
[size] => 2661
[atime] => 1309249269
[mtime] => 1309248657
[ctime] => 1309248657
[blksize] => 4096
[blocks] => 8
)
*/
?>
<?php
function ustat($file) {
clearstatcache();
$ss=@stat($file);
if(!$ss) {
return false;
}
$ts=array(
0140000=>'ssocket',
0120000=>'llink',
0100000=>'-file',
0060000=>'bblock',
0040000=>'ddir',
0020000=>'cchar',
0010000=>'pfifo'
);
$p = $ss['mode'];
$t = decoct($ss['mode'] & 0170000);
$str=(array_key_exists(octdec($t),$ts))?$ts[octdec($t)]{0}:'u';
$str.=(($p&0x0100)?'r':'-').(($p&0x0080)?'w':'-');
$str.=(($p&0x0040)?(($p&0x0800)?'s':'x'):(($p&0x0800)?'S':'-'));
$str.=(($p&0x0020)?'r':'-').(($p&0x0010)?'w':'-');
$str.=(($p&0x0008)?(($p&0x0400)?'s':'x'):(($p&0x0400)?'S':'-'));
$str.=(($p&0x0004)?'r':'-').(($p&0x0002)?'w':'-');
$str.=(($p&0x0001)?(($p&0x0200)?'t':'x'):(($p&0x0200)?'T':'-'));
if(function_exists('posix_getpwuid')){
$oid = @posix_getpwuid($ss['uid']);
} else {
$oid = false;
}
if(function_exists('posix_getgrgid')){
$gid = @posix_getgrgid($ss['gid']);
} else {
$gid = false;
}
$info = array();
$info = array(
'perms'=>array(
'umask'=>sprintf("%04o",@umask()),
'human'=>$str,
'octal1'=>sprintf("%o", ($ss['mode'] & 000777)),
'octal2'=>sprintf("0%o", 0777 & $p),
'decimal'=>sprintf("%04o", $p),
'fileperms'=>@fileperms($file),
'mode1'=>$p,
'mode2'=>$ss['mode']),
'owner'=>array(
'fileowner'=>$ss['uid'],
'filegroup'=>$ss['gid'],
'owner'=> $oid,
'group'=> $gid
),
'file'=>array(
'filename'=>$file,
'realpath'=>(@realpath($file) != $file) ? @realpath($file) : '',
'dirname'=>@dirname($file),
'basename'=>@basename($file)
),
'filetype'=>array(
'type'=>substr($ts[octdec($t)],1),
'type_octal'=>sprintf("%07o", octdec($t)),
'is_file'=>@is_file($file),
'is_dir'=>@is_dir($file),
'is_link'=>@is_link($file),
'is_readable'=> @is_readable($file),
'is_writable'=> @is_writable($file)
),
'device'=>array(
'device'=>$ss['dev'], //Device
'device_number'=>$ss['rdev'], //Device number, if device.
'inode'=>$ss['ino'], //File serial number
'link_count'=>$ss['nlink'], //link count
'link_to'=>($s['type']=='link') ? @readlink($file) : ''
),
'size'=>array(
'size'=>$ss['size'], //Size of file, in bytes.
'blocks'=>$ss['blocks'], //Number 512-byte blocks allocated
'block_size'=> $ss['blksize'] //Optimal block size for I/O.
),
'time'=>array(
'mtime'=>$ss['mtime'],
'atime'=>$ss['atime'],
'ctime'=>$ss['ctime'],
'accessed'=>@date('Y M D H:i:s',$ss['atime']),
'modified'=>@date('Y M D H:i:s',$ss['mtime']),
'created'=>@date('Y M D H:i:s',$ss['ctime'])
),
);
clearstatcache();
return $info;
}
$info = ustat("test.php");
print_r($info);
/*
결과:
Array
(
[perms] => Array
(
[umask] => 0022
[human] => -rw-r--r--
[octal1] => 644
[octal2] => 0644
[decimal] => 100644
[fileperms] => 33188
[mode1] => 33188
[mode2] => 33188
)
[owner] => Array
(
[fileowner] => 2696
[filegroup] => 500
[owner] => Array
(
[name] => root
[passwd] => x
[uid] => 2696
[gid] => 500
[gecos] =>
[dir] => /Server/html
[shell] => /bin/bash
)
[group] => Array
(
[name] => host
[passwd] => x
[members] => Array
(
)
[gid] => 500
)
)
[file] => Array
(
[filename] => test.php
[realpath] => /Server/html/test.php
[dirname] => .
[basename] => test.php
)
[filetype] => Array
(
[type] => file
[type_octal] => 0100000
[is_file] => 1
[is_dir] =>
[is_link] =>
[is_readable] => 1
[is_writable] =>
)
[device] => Array
(
[device] => 2066
[device_number] => 0
[inode] => 201882963
[link_count] => 1
[link_to] =>
)
[size] => Array
(
[size] => 2720
[blocks] => 8
[block_size] => 4096
)
[time] => Array
(
[mtime] => 1309252725
[atime] => 1309252730
[ctime] => 1309252725
[accessed] => 2011 Jun Tue 18:18:50
[modified] => 2011 Jun Tue 18:18:45
[created] => 2011 Jun Tue 18:18:45
)
)
*/
?>