Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
电子邮件中的PHP附件为空_Php_Mysql_Excel_Email_Csv - Fatal编程技术网

电子邮件中的PHP附件为空

电子邮件中的PHP附件为空,php,mysql,excel,email,csv,Php,Mysql,Excel,Email,Csv,我试图从数据库中获取数据,并将其显示在CSV文件中,该文件可以下载并通过电子邮件发送给他人。我已经设法使可下载的文件工作,它显示了所有正确的数据。它还将CSV文件发送给必要的人员,但该CSV文件为空且其中未显示任何数据 这是我的密码: $myroot = "../../"; include($myroot . "inc/functions.php"); // output headers so that the file is downloaded rather

我试图从数据库中获取数据,并将其显示在CSV文件中,该文件可以下载并通过电子邮件发送给他人。我已经设法使可下载的文件工作,它显示了所有正确的数据。它还将CSV文件发送给必要的人员,但该CSV文件为空且其中未显示任何数据

这是我的密码:

    $myroot = "../../";
    include($myroot . "inc/functions.php");
        // output headers so that the file is downloaded rather than displayed
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename=surveys.csv');
        $output = fopen('php://output', 'w');
// Create CSV file
fputcsv($output, array('Name', 'Branch', 'Website','Company', 'Question1', 'Question2', 'Question3', 'Question4', 'Question5'));

$mysql_connection = db_connect_enhanced('*****','*****','*****','*****');
$query='SELECT * FROM *****.*****';
$surveys = db_query_into_array_enhanced($mysql_connection, $query);
$count = count($surveys);
$data = array();
    for($i=0; $i<=$count; $i++){
    $data[] = array($surveys[$i]['FeedbackName'], $surveys[$i]['BranchName'], $surveys[$i]['FeedbackWebsite'], $surveys[$i]['FeedbackCompany'], $surveys[$i]['Question1'], $surveys[$i]['Question2'], $surveys[$i]['Question3'], $surveys[$i]['Question4'], $surveys[$i]['Question5']);  
}

foreach( $data as $row )  
{  
    fputcsv($output, $row, ',', '"');  
}  
fclose($output);  

$encoded = chunk_split(base64_encode($output));

// create the email and send it off

$subject = "File you requested from RRWH.com";
$from = "*****@*****.com";
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-Type: multipart/mixed;
   boundary="----=_NextPart_001_0011_1234ABCD.4321FDAC"' . "\n";

$message = '

This is a multi-part message in MIME format.

------=_NextPart_001_0011_1234ABCD.4321FDAC
Content-Type: text/plain;
       charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hello

We have attached for you the PHP script that you requested from http://rrwh.com/scripts.php
as a zip file.

Regards

------=_NextPart_001_0011_1234ABCD.4321FDAC
Content-Type: application/octet-stream;  name="';

$message .= "surveys.csv";
$message .= '"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="';
$message .= "surveys.csv";
$message .= '"

';
$message .= $encoded;
$message .= '

------=_NextPart_001_0011_1234ABCD.4321FDAC--

';
mail("*****@*****.com", $subject, $message, $headers, "-f$from");
$myroot=“../../”;
包括($myroot.inc/functions.php”);
//输出标题,以便下载而不是显示文件
标题('Content-Type:text/csv;charset=utf-8');
标题('Content-Disposition:attachment;filename=surveys.csv');
$output=fopen('php://output","w",;
//创建CSV文件
fputcsv($output,array('Name','Branch','Website','Company','Question1','Question2','Question3','Question4','Question5');
$mysql_connection=db_connect_增强(“****”、“****”、“****”、“****”、“****”);
$query='SELECT*FROM***********';
$surveys=db\u query\u into\u array\u enhanced($mysql\u connection,$query);
$count=计数(调查);
$data=array();

对于($i=0;$i),它可以帮助您查看错误日志或至少设置

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
这会告诉您base64_encode需要一个字符串,而$output是一个资源

尝试设置

ob_start(); 
始终如一

$output = ob_get_flush();
在fclose和$encoded行之间

还没有尝试过邮件,但这至少对您有一点帮助:)

我尝试了这个代码,一切都很顺利:

<?php
ob_start();
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=surveys.csv');

$output = fopen('php://output', 'w');
fputcsv($output, array('Name', 'Branch', 'Website','Company', 'Question1', 'Question2', 'Question3', 'Question4', 'Question5'));
$data = array();
$data[] = array('Name', 'Branch', 'Website','Company', 'Question1', 'Question2', 'Question3', 'Question4', 'Question5');

foreach( $data as $row )
{
    fputcsv($output, $row, ',', '"');
}
fclose($output);

$output = ob_get_flush();

$encoded = chunk_split(base64_encode($output));

您好,我是一名PHP新手,所知甚少。我将把ini_集合线放在哪里?我放置了ob_start()和echo($output=ob_get_flush());您也指示过我,但现在可下载的CSV文件是空的(以前不是),电子邮件不再发送(以前发送过,但CSV文件是空的)ini_set()必须在脚本的开头,而且它应该持续写入$output=ob_get_flush();我已经测试了上面的代码,一切都很好