2012-01-17 2 views
3

다음 함수는 PHP> 5.3에서는 작동하지만 이전 버전에서는 오류가 있습니다. 5.2 안전을 위해 이것을 어떻게 수정할 수 있습니까?PHP 5.2에서 PHP 클로저 함수를 안전하게 만들기

function _iniloader_get_dirs($dir) { 
     $dirs = array_filter(scandir($dir), function ($item) use ($dir) { 
      return (is_dir($dir.'/'.$item) && $item != "." && $item != ".."); 
     }); 
     // Use array_values to reset the array keys: 
     return array_values($dirs); 
} 

5.2 오류 :

Parse error: syntax error, unexpected T_FUNCTION ... on line 2

+3

PHP 5.3은 3 년 전에 출시되었으며, 5.2는 더 이상 지원되지 않습니다. 그것을 지원하는 것이 절대적으로 필요한가? – ceejayoz

+0

우리의 호스팅 플랫폼은 WordPress 용으로 사용합니다. – Yarin

+4

나는 새로운 호스팅 플랫폼을 얻게 될 것이다. 지원되지 않는 버전의 PHP를 사용하면 심각한 보안 위험이 발생할 수 있습니다. – ceejayoz

답변

3

당신은 폐쇄하여 w/o 그것을 쉽게 할 수 있지만 약간의 우아함을 잃게됩니다 : 일반적으로

function _iniloader_get_dirs($dir) { 
    $dirs = array(); 
    $entries = scandir($dir); 
    foreach($entries as $item) { 
     if($item === '.' || $item === '..') continue; 
     if(!is_dir($dir.'/'.$item)) continue; 
     $dirs[] = $item; 
    } 
    return $dirs; 
} 
+0

DerVO- 이것이 효과가 있습니다. – Yarin

2

클로저를 모방하는 방법을 PHP < 5.3은 create_function()이지만이 경우 use 절이 있기 때문에이 작업을 수행 할 수 없습니다. 글로벌 범위를 통해 변수 수신 거부를 포함하는 무서운 일을합니다. 내가 누락 된 것이있을 수 있습니다.

function _iniloader_get_dirs($dir) { 
    $dirs = array(); 
    foreach (scandir($dir) as $item) { 
     if (is_dir($dir.'/'.$item) && !in_array($item, array('.', '..'))) { 
      $dirs[] = $item; 
     } 
    } 
    return $dirs; 
} 
+1

DaveRandom- 고마워, 이건 너무 효과적이야. 그가 더 빠르면 DerVO에게 주었다. – Yarin

0

당신은이 (테스트되지 않은)처럼 할 수있다 : 어떤 경우에

, 여기 폐쇄를 요구하지 않고 같은 일을 몇 가지 코드입니다. 아이디어는 $ dir의 값을 함수의 소스에 삽입하는 것입니다. 이 함수를 많이 호출하는 경우 때마다 create_function가 호출되기 때문에

function _iniloader_get_dirs($dir) { 
    $dirs = array_filter(scandir($dir), 
     create_function('$item', '$dir = \'' . $dir . '\';' . 
      'return (is_dir($dir."/".$item) && $item != "." && $item != "..");')); 
    return array_values($dirs); 
} 

는 본질적으로 변수를 제외한 다른 기능과 동일하다하더라도, 그것은 영원히 유지 프로그램 메모리에 새로운 기능을 만들어, 조심하십시오. 그래서 이것을 많이 호출하면 프로그램은 더미 함수로 채워지고 메모리가 부족해질 것입니다.

관련 문제