Php 如何读取和发送资源?

Php 如何读取和发送资源?,php,Php,我需要以csv格式生成日志数据并将其发送到邮件。这是我的密码: public function sendMail(){ $csv = $this->createCSV(); $subject = $this->getMessage('subject'); $message = $this->getMessage('message'); $headers = $this->generateHeaders($csv, $message);

我需要以csv格式生成日志数据并将其发送到邮件。这是我的密码:

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

    mail('my_mail@gmail.com', $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: noreplay@'.$_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;
}
问题是我无法在服务器上保存文件,所以我使用,但在它无法读取文件之后…

$csv=fopen'php://temp“,”w+“;-此行将创建资源处理程序,它不是文件名

fclose$csv;-在该行中,资源已关闭,无法再使用。 所以返回$csv;不会返回任何可用的内容

readfile$file-此函数要求将filename作为第一个参数,而不是关闭资源的处理程序


我不明白为什么您需要文件或临时内存存储—只需使用变量而不是全局变量。无论如何,所有数据都将存储在内存中。

您应该在generateHeaders调用后关闭文件,并使用fread而不是readfile。在读取之前,不要忘记fseek$file,0,SEEK_SET


顺便说一下,您将数据保存到一个临时文件中,只是为了在generateHeaders中重新读取它。为什么不将生成的统计数据传递给GenerateHeader而不是$file resource?

您是否尝试过在/tmp上保存文件?你应该在那里有权限。没有这个功能创建csv非常简单。