Ошибка генерации .xls после перехода с PHP 5 на PHP 7 - PullRequest
0 голосов
/ 12 декабря 2018

Я недавно перешел с PHP 5.6 на PHP7.Предыдущий скрипт PHP, который отлично работал в PHP 5.6, теперь дублирует данные столбцов в PHP 7. Я не понимаю, почему.Код:

function cleanData(&$str)
{
    $str = preg_replace("/\t/", "\t", $str);
    $str = preg_replace("/\r?\n/", "\n", $str);
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
    // force certain number/date formats to be imported as strings
    if(preg_match("/^0/", $str) || preg_match("/^+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str))
    {
        $str = "'$str";
    }
}
$day_num = date(d);
$month_num = date(n);
$year_num = date(Y);
// file name for download
$filename = "Subscriber_list_" . $month_num . "-" . $day_num . "-" . $year_num . ".xls";
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; 
filename=\"$filename\"");
header('Cache-Control: max-age=0');
echo "ID \t Title \t First Name \t Last Name \t E-Mail \n";
$news_query = mysqli_query("SELECT DISTINCT id, title,firstname, lastname, email FROM users WHERE newsletter = 1 ");
while($row =mysqli_fetch_array($news_query, MYSQL_ASSOC)) {
    array_walk($row, 'cleanData');
    echo implode("\t", array_values($row)) . "\n";
}
exit;

БД довольно стандартная.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Это решено, спасибо.Я переписал сценарий, используя:

<code> <pre>
 function fetch_assoc($result) {
 return mysqli_fetch_assoc($result);
 }
 
0 голосов
/ 12 декабря 2018

Я думаю, это потому, что вы используете константу MYSQL_ASSOC вместо MYSQLI_ASSOC при извлечении строк из запроса.

Эта опечатка работала, когда вы работали на PHP 5, потому что этидве константы имеют одинаковое значение.Но константа MYSQL_ASSOC равна undefined в PHP 7, поскольку расширение MYSQL было удалено, поэтому mysqli_fetch_array соответствует поведению по умолчанию при извлечении как числовых, так и ассоциативных ключей, следовательно, дублированных столбцов.

...