2013-02-20 2 views
1

로그 데이터를 생성하여 메일에 csv 형식으로 보내야합니다. -이 줄 것이다리소스를 읽고 보내는 방법은 무엇입니까?

public function sendMail(){ 
    $csv = $this->createCSV(); 
    $subject = $this->getMessage('subject'); 
    $message = $this->getMessage('message'); 
    $headers = $this->generateHeaders($csv, $message); 

    mail('[email protected]', $subject, $message, $headers); 
} 

private function createCSV(){ 
    $data = $this->getAVG(); 

    $csv = fopen('php://temp', 'w+'); 

    // long statistics generation 

    fclose($csv); 

    return $csv; 
} 

private function generateHeaders($file, $message){ 
    $boundary = md5(uniqid(time())); 

    $headers = 'MIME-Version: 1.0'."\r\n"; 
    $headers .= 'Content-Type: multipart/mixed; boundary="'.$boundary."\"\r\n"; 
    $headers .= 'From: [email protected]'.$_SERVER['SERVER_NAME']."\r\n"; 

    $headers .= '--'.$boundary."\r\n"; 

    $headers .= "Content-Type: text/html; charset=utf-8\r\n"; 
    $headers .= "Content-Transfer-Encoding: base64\r\n"; 
    $headers .= "\r\n"; 
    $headers .= chunk_split(base64_encode($message)); 

    $headers .= '--'.$boundary."\r\n"; 

    $headers .= "Content-Type: text/csv; name=\"ServersLogs.csv\"\r\n"; 
    $headers .= "Content-Transfer-Encoding: base64\r\n"; 
    $headers .= "Content-Disposition: attachment; filename=\"ServersLogs.csv\"\r\n"; 
    $headers .= "\r\n"; 
    $headers .= chunk_split(base64_encode(readfile($file))); 

    $headers .= "\r\n--".$boundary."--\r\n"; 

    return $headers; 
} 
문제는 내가 서버에 파일을 저장하지 못할, 그래서 난 php://를 사용하지만이 파일을 읽을 수 없습니다 후이다

...

+0

'/ tmp'에 파일 저장을 시도한 적이 있습니까? 거기에 권한이 있어야합니다. – fedorqui

답변

0

$csv = fopen('php://temp', 'w+'); : 여기 내 코드입니다 리소스 (핸들러)를 만들면 파일 이름이 아닙니다.

fclose($csv); -이 줄의 리소스는 닫혀 있으며 더 이상 사용할 수 없습니다.
그래서 return $csv;은 사용할 수있는 것을 반환하지 않습니다.

readfile($file) -이 함수는 닫힌 리소스의 핸들러가 아니라 첫 번째 인수로 filename이 필요합니다.

왜 파일이나 임시 메모리 스토리지가 필요한지 알지 못합니다. 변수 만 사용하십시오 (전역이 아님). 어쨌든 전체 데이터는 메모리에 저장됩니다.

+0

'fputcsv'를 사용하고 있습니다. – user1692333

+0

이 함수없이 csv를 만드는 것은 매우 간단합니다. –

0

generateHeaders() 호출 후 파일을 닫고 readfile() 대신 fread()를 사용해야합니다. 읽기 전에 fseek ($ file, 0, SEEK_SET)를 잊지 마세요.

그런데 데이터를 임시 파일에 저장하면 generateHeaders()에서 다시 읽을 수 있습니다. 생성 된 통계 데이터를 $ file 리소스 대신 generateHeaders()로 전달하는 것이 어떻습니까?

관련 문제