2013-12-13 3 views
0

DB의 인스턴스에 대한 보고서를 지난 달 동안 실행하려고합니다. 그러면 결과가 .CSV 파일로 저장됩니다. 발생하는 문제는이 스크립트에서 내부 서버 오류 500이 발생한다는 것입니다.
쿼리에 WHERE 절을 사용하여 데이터를 필터링하면이 문제가 발생하지 않으므로 쿼리와 함수를 알 수 있습니다 .CSV 파일을 만드는 것은 어느 정도까지 작동합니다. 나는 완전히 채워진 .CSV 파일을 얻는다. 그러나 추가 WHERE 절이 없으면 파일은 대다수의 데이터가있는 지점에 채워지는 것처럼 보이지만 다시 시작된 것처럼 보이며 결과 파일에는 전체 데이터 중 약 1/8 만 포함됩니다.
나는이 방법은 csv 파일 */오류 500 내부 서버 오류 CSV로 PHP 스크립트 작성

//-----Connection to DB-----// 

    $connectionInfo = array("UID" => $this->dbLogin, "PWD" => $this->dbLogin); 
    $conn = sqlsrv_connect($this->serverName, $connectionInfo)or die(print_r(sqlsrv_errors()));  

    //-----SQL Query-----// 

    $getList = sqlsrv_query($conn, $this->queryString, array(), $this->options)or die(print_r(sqlsrv_errors()));    

    //-----File creation-----// 

    $fp = fopen("../" . $this->portal . "/" . $this->folder . "/" . $this->fileName . ".csv", 'w+'); 

    // //-----Add in first row that contains the column titles-----// 



    fputcsv($fp, $this->headerArray); 

    fclose($fp);  

    // // // -----Add data to the csv file-----// 

    $fp = fopen("../" . $this->portal . "/" . $this->folder . "/" . $this->fileName . ".csv", 'a+'); 
    $data = array(); 
    while ($row = sqlsrv_fetch_array($getList, SQLSRV_FETCH_ASSOC)) { 

    $data['id'] = $row['id']; 
    $data['fullname'] = $row['fullname']; 
    $data['profile'] = $row['profile']; 
    $data['starttime'] = date_format($row['starttime'],'D jS M Y G:i'); 
    $data['endtime'] = date_format($row['endtime'], 'D jS M Y G:i'); 
    $endTime = date_format($row['endtime'], 'U'); 
    $startTime = date_format($row['starttime'], 'U'); 
      if($startTime == null || $startTime == ""){ 
     $startTime = $endTime; 
    } 
    $diff = ($endTime - $startTime); 
     $data['duration'] = round($diff/3600).gmdate(":i:s", $diff); 
      $data['hour'] =date_format($row['starttime'] ,'G'); 
    $data['ref'] = $row['ref']; 
    $data['endType'] = $row['endType']; 
    $data['problem'] = $row['problem']; 
    $data['solution'] = $row['solution']; 
    $data['type'] = $row['type']; 

    fputcsv($fp, array_values($data)); 
    }  

    fclose($fp); 

    sqlsrv_close($conn);  
} 

을 만드는 데 사용됩니다 * 월 .CSV 함수를 CreateFile() {

/* 의 데이터 40K + 행을 기대하고있다 .csv 파일을 만들기 위해 내 클래스 파일에서 사용되는 함수입니다. 내가 사용하고있는 쿼리가 있습니다.

$this->queryString ="SELECT A.id 

     ,B.firstname + ' ' + B.lastname AS fullname 

     ,B.location 
     ,A.profile 
     ,A.siteid 
     ,A.accountnumber 
     ,A.starttime 
     ,A.endtime 
     ,A.ref 
     ,A.endType 
     ,A.problem 
     ,A.solution 
     ,A.type 

     FROM trend.report A 
     LEFT JOIN users.profile B 
     ON A.empId = B.id 

     WHERE DATEDIFF(M, A.endtime, GETDATE()) = 0 
     ORDER BY A.endtime DESC"; 

내가 예를

AND A.profile ='exampleProfile' 

에 대한 추가하면 나는 아직도 20K + 행을 얻을,하지만 난 compeleted .CSV 파일을 얻을.

무엇이 눈에 띄게 분명합니까? 아니면 스크립트를 실행하는 데 걸리는 행/시간의 수 때문일 수 있습니까? 감사합니다.

+0

일반적으로 500 오류는 웹 서버의 오류 로그에 항목을 생성합니다. –

답변

0

명령 줄이나 브라우저에서 실행 하시겠습니까?

1) 브라우저에서이 작업을 수행하면 HTTP 시간 초과 (종종 30 초)가 발생할 수 있습니다. 인상 할 수는 있지만 명령 행에서 PHP 스크립트를 실행하는 것이 더 좋습니다.

<?php 
set_time_limit(600); // 10 minutes 

2) 메모리 제한에 도달했습니다. 당신의 PHP 파일의 첫 번째 줄에 인상 시도 :

<?php 
ini_set('memory_limit', '2048M'); 

실제 상위 서버에 따라, 서버는 PHP 파일을 통해 memory_limit를 설정 받아 들여야한다. 그렇지 않으면 웹 서버에서 바로 설정할 수 있습니다.

+0

응답을 보내 주셔서 감사합니다. 지금 시도 중입니다. 그러나 스크립트를 다시 시작하고 다시 시작하는 방법을 설명하는 것은 무엇입니까? 나는 다시 시작할 때 나머지 결과를 기대할 것이다. 그러나 처음 몇 줄을 되 돌리는 것이다. 아마도 메모리 제한? – Shamrockonov