2009-06-20 7 views
1

나는 동일한 페이지에 포함시킬 필요가있는 2 개의 '라이브러리'를 가지고 있습니다. 간단한 기계 공개 토론과 Wordpress.함수 이름이 서로 다른 두 라이브러리의 PHP에서 충돌합니다

그러나 둘 다 서로 충돌하는 is_admin() 함수를 가지고 있습니다.

Fatal error: Cannot redeclare is_admin() (previously declared 
in /home/site.com/wordpress/wp-includes/query.php:100)in /home/site.com/smf/Sources/Security.php on line 82) 

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 예를 들어 하나의 라이브러리에 대한 모든 호출을 is_admin2()로 수정해야 할 필요는 없습니다.

답변

2

나는 당신이 너무 많은 선택의 여지가 있지만 함수의 이름을 바꾸거나 클래스 주위의 모든 함수를 감싸고 있다고 생각하지 않습니다. 그게 PHP < = 5 *의 문제입니다 : 네임 스페이스가 없으며 개발자는 종종 객체 지향 접근법을 사용하는 것보다 느슨한 함수로 가득 찬 스크립트를 작성하는 것을 선호합니다.

1

필자는 작은 글씨체에 대한 각 함수 호출의 이름을 수동으로 바꾸었다. (필자는 그것이 포럼 일 것이라고 추측한다). 행운을 빕니다.

0

가능성은 네임 스페이스를 지원하는 PHP 5.3을 사용하는 것입니다. 구현의 세부 사항을 모르지만 으로하면 다른 네임 스페이스의 라이브러리를 래핑 할 수 있습니다.

불행히도 5.3은 여전히 ​​안정 버전을 공격하지 않았습니다. 만약 당신이/그것을 사용하고 싶지 않다면, 이름 바꾸기를 포함하지 않는 유일한 옵션은 분리 된 두 개의 PHP 스크립트를 만들고, 다른 인터프리터에서 시작하고, 어떻게 든 통신하도록합니다 (파이프, 소켓, 임시 파일).

0

내게있어서 이것은 단순한 컴퓨터 포럼에서 is_admin의 보안 권고안에서 발견 된 주석이었습니다.

// Grudge chickens out and puts this in for combatibility. This will be ripped out on day one for SMF 1.2 though ;) 

내가 비록 때마다 업그레이드 할 때이를 제거해야 할 것이다 약간은 억세스 할수 ...

1

is_admin_wp()is_admin_smf()에 기능을 이름 바꾸기 ... 그 어쨌든 필요하지 않을 것 같다. 그런 다음 자신의 is_admin() 기능을 정의하십시오. 이것은 단순한 래퍼 일 수 있습니다.

function is_admin() { 
    // from what function is_admin was called? 
    list (, $last) = debug_backtrace(); 
    if (strpos($last['file'], 'wordpress') >= 0) { 
     $fn = 'is_admin_wp'; 
    } else { 
     $fn = 'is_admin_smf'; 
    } 
    $args = func_get_args(); 
    return call_user_func_array($fn, $args); 
} 
+0

향후이 문제가있는 사람들에게는 나쁜 생각이 아닙니다. 감사 –

관련 문제