2009-11-19 2 views
1

Java Servlet에서 PHP로 응용 프로그램을 포팅합니다. PHP에서 Servlet.init()과 동등한 것은 무엇입니까?서버를 초기화하는 방법 PHP에서 한 번만

기본적으로 페이지는 계산해야 할 테이블을 사용합니다. 그것은 꽤 비싼 작업입니다. 나는 램프를 사용하고있다. 아파치 시작시 한 번만 테이블을 초기화 할 수있는 방법이 있는지 궁금합니다.

답변

3

몇 가지 방법으로이 작업을 수행 할 수 있지만 익숙한 Servlet.init() 메서드를 실제로 모방 한 것은 없습니다. 값을 초기화하여 세션에 저장할 수는 있지만 각 사용자마다 하나의 페널티를 만들거나 응용 프로그램이 액세스 할 수 있고 각 사용자마다 고유하지 않은 캐시를 사용하게됩니다. Zend에는 메모리 기반 (예 : APC 또는 eAccelerator) 및 파일 기반 캐싱과 함께 작동하는 캐시 용 인터페이스를 사용하기가 매우 쉽습니다.

+0

각 사용자가 일반적으로 한 번만 페이지를 방문하기 때문에 세션이 작동하지 않습니다. 캐시가 작동 할 수 있습니다. 그것을 들여다 볼 것입니다. –

+0

젠드 프레임 워크 (오픈 소스, 무료)를 사용하고 있다면 ZendCache를 사용해보고 백 엔드 파일을 사용하여 효과가 있는지 확인하십시오. 그렇다면 mem 캐시 백엔드로 쉽게 전환하여 성능을 향상시킬 수 있습니다. 또한 Zend Framework를 포함하지 않고도 APC 및 eAccelerator를 사용할 수 있습니다. –

3

http://www.zend.com/products/platform/과 같은 것이 필요합니다. 응용 프로그램 서버와 달리 PHP는 모든 요청에 ​​대해 모든 처리를 수행합니다. zend 플랫폼과 같은 것이 없다면 지속성에 대한 개념이 없습니다.

+0

우리는 값이 싸기 때문에 상업적인 제품이 문제가되지 않습니다. 오픈 소스에 상응하는 모든 것을 알고 있습니까? –

+0

오픈 소스 대안에 대해 모르겠다. 세션 관리가 문제가되지 않으므로 시도해 볼 수있는 또 다른 옵션은 내가 제안하는 것을 주저하면서 데이터베이스에 값을 저장하는 것입니다. PHP 객체를 직렬화하거나 다른 방법을 통해. – Myles

1

PHP에는 응용 프로그램 범위가 없습니다. $GLOBALS을 남용 할 수도 있지만 $_SESSION에 데이터를 저장하거나 Zend_Cache을 사용하는 것이 좋습니다.

1

모든 세션에서 하나의 테이블을 공유하고 싶습니까? PHP는 완전히 고립 된 세션을 만들기 위해 열심히 노력합니다. 심지어 static 변수가 페이지 당 초기화됩니다. APC, memcache 또는 이와 비슷한 값을 사용할 수 있습니다.

1

아마도 서버의 파일에서 테이블을 초기화 할 수 있습니까? 예를 들어, 테이블에 뭔가가 업데이트 될 때마다 다시 작성해야하는 경우, 다음 PHP 코드를 초기화하는 동안

:

compare data source update against file update time 
if file needs update, then 
    do number crunching 
    write into file 
else 
    read file 

이 사용되는 파일을 방지 논리에 의해 보완되어야 할 것이다 동시성 101 연습이 업데이트됩니다.

+0

I/O 작업이 지연되는 곳이기 때문에 파일이 작동하지 않습니다. –

+0

확실히 파일 I/O가 데이터 계산보다 빠릅니까? 적어도 그것이 내가 "그것은 값 비싼 작업"이라고 해석 한 것입니다. 분명히 파일을 읽는 것이 쿼리 중에 너무 비싸다고 생각하지 않습니까? – wallyk

+0

서버에 루트 (또는 퓨즈) 액세스 권한이 있으면 파일을 tmpfs 마운트에 저장할 수 있습니다 (항상 메모리에 저장됩니다). 메모리에 머무르게하는 더 쉬운 방법이있을 수 있습니다. –