db_table.optimize.php 캡챠파일삭제
db_table.optimize.php 54~59라인 캡챠파일 자동제거 하는부분에서
foreach (glob(G5_PATH.'/data/cache/kcaptcha-*.mp3') as $file){ ... }
부분이 지울 캡챠파일이 하나도 없는경우 glob 실행값이 boolean false로 반환되면서+
Warning: Invalid argument supplied for foreach() in /.../db_table.optimize.php on line 54
오류를 반환합니다. 이 과정 이후 진행되는 헤더 데이터 쓰기부분에서 이미 전송된 데이터가 있어 헤더쓰기가 제한되어 추가적인 오류메시지도 발생합니다. 미리 glob을 실행하여 조건부 실행을 하던지 제한이 필요할 것 같습니다.
[code]
$captcha=glob(G5_PATH.'/data/cache/kcaptcah-*.mp3');
if($captcha){
foreach($captcha as $file) {
if (filemtime($file) + 86400 < G5_SERVER_TIME) {
@unlink($file);
}
}
}
[/code]
foreach (glob(G5_PATH.'/data/cache/kcaptcha-*.mp3') as $file){ ... }
부분이 지울 캡챠파일이 하나도 없는경우 glob 실행값이 boolean false로 반환되면서+
Warning: Invalid argument supplied for foreach() in /.../db_table.optimize.php on line 54
오류를 반환합니다. 이 과정 이후 진행되는 헤더 데이터 쓰기부분에서 이미 전송된 데이터가 있어 헤더쓰기가 제한되어 추가적인 오류메시지도 발생합니다. 미리 glob을 실행하여 조건부 실행을 하던지 제한이 필요할 것 같습니다.
[code]
$captcha=glob(G5_PATH.'/data/cache/kcaptcah-*.mp3');
if($captcha){
foreach($captcha as $file) {
if (filemtime($file) + 86400 < G5_SERVER_TIME) {
@unlink($file);
}
}
}
[/code]
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 3개
empty array 를 반환한다고 되어 있습니다. 오류가 발생했을 때 false 를 반환한다고 되어 있는데요..
glob 에서 오류가 발생하는 원인을 먼저 점검해보셔야 한다고 생각이 됩니다.
On some systems it is impossible to distinguish between empty match and an error.
특정 시스템에서는 빈 값이 반환될 경우 에러로 출력된다고 하네요...
제 환경입니다. CentOS 6.5 64bit / PHP5.3.3 / Apache 2.2.22
[code]
<?
error_reporting(E_ALL);ini_set('display_errors',1);
var_dump(glob('./data/cache/*.mp3'));
?>
[/code]
*.php로 했을때는 정상적으로 파일 리스트가 출력됩니다. 하지만 매치 데이터가 없는경우 bool(false)가 출력됩니다 ㅠㅠ
* 구글링결과 open_basedir이 설정된 경우 이런 현상이 발생할 수 있다고 하네요.
[code]
[root@pwneo cache]# php -dopen_basedir='/' -r 'var_dump(glob("./a.a"));'
bool(false)
[root@pwneo cache]# php -r 'var_dump(glob("./a.a"));'
array(0) {
}
[/code]
[code]
// 음성 캡챠 파일 삭제
$captcha_mp3 = glob(G5_PATH.'/data/cache/kcaptcha-*.mp3');
if($captcha_mp3 && is_array($captcha_mp3)) {
foreach ($captcha_mp3 as $file) {
if (filemtime($file) + 86400 < G5_SERVER_TIME) {
@unlink($file);
}
}
}
[/code]