2013-05-15 3 views
-1

Im пытается взять данные из базы данных и отобразить их в CSV-файле, который загружается и отправляется по электронной почте кому-то. Мне удалось загрузить загружаемый файл и отобразить все правильные данные. Он также отправляет CSV-файл нужному человеку, но CSV-файл пуст, и в нем нет данных.Вложение PHP по электронной почте пуста

Вот мой код:

$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"); 

Я провел полтора дня на это, но я не могу видеть проблему. Может кто-нибудь, пожалуйста, укажите мне, почему прикрепленный файл CSV пуст?

я получаю своего рода отчаянные и подчеркнуты :(пожалуйста, кто-то помочь мне.

ответ

0

Это помогло бы вам взглянуть на ваши журналы ошибок или, по крайней мере, установив

ini_set('error_reporting', E_ALL); 
ini_set('display_errors', 1); 

, что и сказал бы вам, что base64_encode ожидает строка, а $ вывода является ресурсом.

Попробуйте установить

ob_start(); 

к началу и

$output = ob_get_flush(); 

между вашими fclose & $ закодированных строк.

не судимая почты еще, но это должно помочь вам, по крайней мере немного :)

I судимые этому код и все работало хорошо:

<?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)); 
+0

Привет, Я являюсь разработчиком PHP и новобранца знаю очень мало. Где бы я поместил строки ini_set? Я поместил ob_start() и echo ($ output = ob_get_flush()); где вы мне тоже инструктировали, но теперь загружаемый CSV-файл пуст (раньше он не был), и письмо больше не отправляет (оно отправлено ранее, но с пустым CSV-файлом). – user2381872

+0

Ini_set() должен быть в начале вашего скрипта , кроме того, он должен продолжать писать $ output = ob_get_flush(); Я тестировал этот код выше, и все работало хорошо – Frosti