Ciao,
ho questo script che interroga il DB e genera un .xls funzionante sotto php5 ma che va in loop in ambiente php7 (file generato che continua a aumentare di dimensione senza mai scaricarsi - download infinito)
Temo sia dovuto a come php7 interpreta l'array.... lo posto per intero:
Codice PHP:
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
// filename for download
$filename = "foglio_presenze" . date('Ymd') . ".xls";
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
$flag = false;
$seminarioID = $_GET['recordID'];
mysqli_select_db($tao_conn, $database_tao_conn);
$result = mysqli_query($tao_conn,"SELECT seminari.titolo, seminari.datainizio, seminari.datafine, iscrizioni.dataritiro, utenti.cognome, utenti.nome, corsi.titoloCorsi, null as mattina1, null as pomeriggio1, null as mattina2, null as pomeriggio2
FROM iscrizioni
LEFT JOIN seminari ON $seminarioID = seminari.idseminari
LEFT JOIN corsi_has_seminari ON iscrizioni.corsi_idcorsi = corsi_has_seminari.corsi_idcorsi
LEFT JOIN utenti ON iscrizioni.utenti_idutenti = utenti.idutenti
LEFT JOIN corsi ON iscrizioni.corsi_idcorsi = corsi.idcorsi
WHERE iscrizioni.dataritiro IS NULL AND iscrizioni.seminari_idseminari = $seminarioID OR iscrizioni.dataritiro IS NULL AND corsi_has_seminari.seminari_idseminari = $seminarioID
ORDER BY corsi.titoloCorsi, utenti.cognome") or die('Query failed!');
while(false !== ($row = mysqli_fetch_assoc($result))) {
if(!$flag) {
echo "Titolo seminario: " .$row['titolo']."\r\n". "\r\n";
echo "Data inizio: " .$row['datainizio']."\r\n";
echo "Data fine: ".$row['datafine']."\r\n". "\r\n";
// display field/column names as first row
$keys = array_keys($row);
array_shift($keys);
array_shift($keys);
array_shift($keys);
array_shift($keys);
echo implode("\t", $keys ) . "\r\n";
$flag = true;
}
unset($row['titolo']);
unset($row['datainizio']);
unset($row['datafine']);
unset($row['dataritiro']);
array_walk($row, __NAMESPACE__ . '\cleanData');
echo implode("\t", array_values($row)) . "\r\n";
}
exit;