Похоже, что сгенерированное PHP приложение CSV теряет часть первой строки через Outlook, но не через Gmail - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть скрипт PHP, работающий через cron под FreeBSD 8.0, sendmail, PHP 5.2.11 (cli).

Первая строка CSV определяется этой строкой:

$content .= "\n" .  'first_name,last_name,address1,address2,city,state_province,postal_code,country' . "\n";

До перехода на текущий сервер этот скрипт работал нормально, но теперь у него есть сбой:

Если письмо получено через Outlook, первая строка в Excel выглядит следующим образом:

ate_province    postal_code country

и это в текстовом редакторе:

ate_province,postal_code,country

Я добавил дополнительный «\ n» в начало и увидел, что он добавил один символ в сокращенную строку, поэтому я попытался добавить 31 и, конечно же, Outlook, мойтекстовый редактор и Excel видят идеальный файл.

Затем я вошел в Gmail и загрузил файл, который должен быть точно таким же, как и тот же адрес электронной почты.Я открываю его в Excel и в моем текстовом редакторе, и что я должен найти, кроме 31 новой строки ...

У кого-нибудь есть советы по поводу того, что происходит?

// По запросу ссылка на письмо с заголовкамиhttp://pastebin.com/wuyVf9HP

// РЕДАКТИРОВАТЬ добавление всей почтовой процедуры по запросу XzKto

if (fwrite($handle, $content) === FALSE) {
  die("Cannot write to file ($filename)");
}
$message = "Here is the file (comma-separated values) of addresses for\n";
$message .= $pm_row['title'] . " Requests ($now_YmdHMS).\n\n";
$data_email = $pm_row['fulfillment_data_email'];
$data_email_cc = "$pm_row[fulfillment_data_email_cc],$developer_email";
$subject = $pm_row['title'] . " Requests ($now_YmdHMS)";
$random_hash = md5(date('r', time()));
$headers = "From: xxxx <tourism@xxx.org>\r\nReply-To: tourism@xxx.org\r\nCc:$data_email_cc"; 
$headers .= "\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment = chunk_split(base64_encode(file_get_contents($filename)));
$output = "
--PHP-mixed-$random_hash; 
Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash'
--PHP-alt-$random_hash
Content-Type: text/plain; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit

$message

--PHP-alt-$random_hash 
Content-Type: text/html; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit

$message

--PHP-alt-$random_hash--

--PHP-mixed-$random_hash
Content-Type: application/zip; name=$now_YmdHMS.$pm_row[handle].csv
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

$attachment
--PHP-mixed-$random_hash--";
mail($data_email, $subject, $output, $headers);

1 Ответ

0 голосов
/ 19 сентября 2011

Не уверен, разрешит ли это проблему или нет, но я бы хотел попробовать fputcsv вместо создания файла CSV вручную.

Использование будет выглядеть примерно так:

$fp = fopen('output.csv', 'w');
$fields = array('first_name', 'last_name', 'address1', .....);
$rows = func_that_returns_data();

fputcsv($fp, $fields);
foreach ($rows as $row) {
    fputcsv($fp, $row);
}
...