У меня есть сеанс многомерный массив, который заполняется правильно помечены $_SESSION['data']
что пользователь может экспортировать как .csv
, Я проверил это на localhost
и это работает правильно 100% времени.
Я загрузил на веб-сервер, и он больше не работает должным образом
Я подтвердил, что массив заполняется реальными данными print_r($_SESSION['data']);
и результаты отображаются на странице с данными, представляющими интерес каждый раз. (в настоящее время я отключил вывод на самом сайте, чтобы уменьшить время загрузки)
однако действительно странная вещь, которая сводит меня с ума в течение целого дня, это то, что она работает, но только после попытки экспортировать ее один раз (которая экспортирует пустой файл), снова запустите страницу и затем снова нажмите кнопку экспорта (и она заполняется) с правильными данными)
вот код экспорта, который я использую
<?PHP
session_start();
$tdata = array();
$tdata = $_SESSION['data'];
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
// file name for download
$filename = "CSVOutput" . date('Ymd') . ".csv";
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
$flag = false;
foreach($tdata as $row) {
if(!$flag) {
// display field/column names as first row
echo implode(",", array_keys($row)) . "\n";
$flag = true;
}
array_walk($row, 'cleanData');
echo implode(",", array_values($row)) . "\n";
}
exit;
?>
и вот ссылка на мою страницу, которая плохо себя ведет:
после того, как вы откроете страницу, если вы сделаете следующее, вы создадите то, что я испытываю
я построил это на wamp
использование сервера php 5.5.12
мой хозяин имеет php 5.3.29
Есть ли какой-то явной ошибки я делаю в коде экспорта выше? или это какая-то конфигурация сервера? или это (и я предполагаю, что это) какая-то функция моего кода спагетти, которая вызывает эту ошибку. это просто сбивает с толку меня, что это будет работать половину времени, как это, когда массив сессий заполняется должным образом каждый раз. он работает на 100% правильно каждый раз / расчет / итерация после этого начального расчета
здесь html
позвонить CSVout
процедура
<createcsv>
<FORM NAME ="form2" METHOD ="POST" ACTION = "csvout.php">
<INPUT TYPE = "Submit" Name = "Submit2" style="height:24px; width:145px; background-color:#FFFFCC; border-color: #556C55" VALUE = "Export Results">
</form>
</createcsv>
и создание сеанса $_SESSION['data'] = $data;
Я действительно тяну свои волосы на этом, любой совет будет оценен. это мое PHP
учебный проект, и я буду делать редизайн кода, но я просто не могу допустить, чтобы эта незначительная ошибка прошла до ее запуска, так как это единственное, что удерживает меня от мысли, что эта версия 1 «сделана»
Задача ещё не решена.
Других решений пока нет …