2016-06-27 2 views
1

테이블의 값으로 편집 할 Excel 파일 (약 5000-8000 행 & 32 cols)이 있습니다. 나는이 작업을 성공적으로 마쳤지 만 스크립트의 평균 실행 시간을 줄이려고합니다.

그래서로드 된 개체를 세션에 저장하고 매번 다시로드하는 대신 스크립트가 실행될 때마다 존재하는지 확인했습니다.

치명적인 오류 : 메시지 catch되지 않은 예외 'PHPExcel_Exception' '귀하의 요청 시트 내가 (내 세션 변수가 존재하는 경우) 처음으로 이후의 코드를 실행하면

if (!isset($_SESSION['col10Read'])) 
{ 
    global $sheet; 
    $objPHPExcel = $objReader->load($inputFileName); 
    $_SESSION['col10Read'] = $objPHPExcel; 
    $sheet = $objPHPExcel->getActiveSheet(); 
} 
else 
{ 
    global $sheet; 
    $sheet = $_SESSION['col10Read']->getActiveSheet(); 
} 

하지만,이 오류가 발생합니다 색인 : 0은 범위를 벗어났습니다. 실제 시트 수는 0입니다. '

나는 하루 동안 diff 방식을 시도해 왔으며, 끝없이 Google을 검색했습니다. 어떤 도움이 있었습니까?

+0

개체를 세션에 넣는 것이 더 빠를 수는 없습니다. –

+0

$ _SESSION 변수에 넣을 매우 큰 개체입니다. PHP가 세션 데이터를 위해 tmp 폴더를 사용한다면, 디스크 공간이 부족할 가능성이 있습니다! –

+0

@BenHillier 나는이 모든 문제에 대해 생각 했으므로 개체의 크기가 약 40MB인데 한 열만로드하므로 아직 너무 큽니다. –

답변

1

$_SESSION 작품은 serializing으로 전달됩니다. 모든 클래스가 직렬화되도록 디자인되어있는 것은 아니며 저장하는 객체의 유형이 그러한 클래스 중 하나 인 것처럼 보입니다. 이러한 문제를 해결하는 가장 쉬운 방법은 개체 자체를 저장하지 않고 개체의 상태를 복원 할 수있는 충분한 정보를 저장하는 것입니다. 예를 들어 파일 이름과 행을 저장할 수 있습니다. 이것이 아마도 당신이 피하려고했던 것임을 알고 있습니다 만, 안타깝게도 사용하고있는 프레임 워크는 구현하고자하는 최적화를 위해 설계되지 않았습니다.

+0

나는 당신의 대답을 주셔서 감사합니다. 지금 당장은 커스텀 세션 핸들러를 작성하려고 노력할 것입니다. –

관련 문제