Проблема создания файла CSV в IE9

Я смотрю на странную проблему с Internet Explorer 9. Приведенный ниже код успешно генерирует заполненный файл CSV при запуске в Safari, IE8, IE10, IE11, Chrome и Firefox, но создает пустой файл CSV (только заголовки) в IE9. Это не похоже на проблему с данными, учитывая, что ошибка возникает только в IE9. Я смог протестировать и подтвердить на 3 разных машинах под управлением IE9.

Это унаследованный сценарий, который я унаследовал с SQLSRV вместо MSSQL PDO, хотя я взял на себя смелость вычеркнуть mysql и заменить его на PDO, обернуть его в функцию и тщательно прокомментировать для собственного здравомыслия.

        # Create a CSV sheet with details we need
# Generate file name based on timestamp
$file = "$_SESSION[user_name]_" . "tutorincomplete_" . date("Y-m-d_H-i-sa");

# 1: Open CSV File
$myFile = ".\csv\\" . "$file.csv";
$fh = fopen($myFile, 'w') or die("can't open file");

# Get list of active classes from MSSQL DB
$sql = "SELECT DISTINCT
static_title,
LEFT(CONVERT(VARCHAR, course_end_date, 120), 150) AS course_end_date,
RTRIM(static_code) as static_code,
RTRIM(session_code) as session_code,
staff_name
FROM
snip";

# Append to query where a school is present
if (ISSET($_SESSION['user_school']) AND $_SESSION['user_school'] != "None")
{
$sql .= "WHERE
school = ?
ORDER BY staff_name ASC";
$params1 = array($_SESSION['user_school']);
$query = sqlsrv_query($conn, $sql, $params1);
}
else
{
if (isset($_POST['school']) AND $_POST['school'] != "All") {
$sql .= "WHERE
school = ?
ORDER BY staff_name ASC";
$params1 = array($_POST['school']);
$query = sqlsrv_query($conn, $sql, $params1);
} else {
$sql .= "ORDER BY staff_name ASC";
$query = sqlsrv_query($conn, $sql);
}

}

$today = date('U');

# Set headers for CSV file
$head = array("Static title", "Course end date", "Static code", "Session code", "Staff name");
fputcsv($fh, $head);
$count = 0;

# Loop through MSSQL results for comparison
while ($obj = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC))
{

$finish = $obj['course_end_date'];
# Strip the time (keep ISO date format intact)
$finishSub = substr($finish, 0, 10);

# Create timestamp from date format
$finishTs = strtotime($finishSub);

# Compare and display <option> tag if valid
if ($today > ($finishTs - 604800))
{

# Fetch information on course; Decide of course is complete or incomplete
# To do this, first check for course entries in the MySQL database
# If they are present, we will use MySQL instead of MSSQL (To reference completed courses)
$sql3 = "SELECT * FROM snip WHERE static = :stc AND session = :sec ORDER BY static ASC";
$query3 = $pdo->prepare($sql3);
$query3->bindParam(':stc', $obj['static_code']);
$query3->bindParam(':sec', $obj['session_code']);
$query3->execute();
$rowCount = $query3->rowCount();# Check for result count in MySQL
if ($rowCount > 0)
{
$result = $query3->fetch(PDO::FETCH_OBJ);

if ($result->complete == 0) {
$incomplete = 1;
} else {
$incomplete = 0;
$count++;
}

} else {
# No MySQL entry; Mark as incomplete
$incomplete = 1;
}

if ($incomplete > 0)
{
$arr = array($obj['static_title'], $obj['course_end_date'], $obj['static_code'], $obj['session_code'], $obj['staff_name']);
fputcsv($fh, $arr);
}

}

}

echo "<h1>CSV file generation complete</h1>
<p>Skipped $count classes</p>
<p>File generation complete. File name $file.csv <a href=\"./csv/$file.csv\">Click here to open</a></p>";
}

Во всем, кроме IE9, он генерирует «Пропущенные X-классы», CSV-файл имеет х количество записей.

Но в IE9, «Пропущено 0 классов», файл CSV содержит только заголовки столбцов.

РЕДАКТИРОВАТЬ: я узнал через некоторые эксперименты, что SQLSRV передает пустой массив ТОЛЬКО в IE9. Это не влияет на любой другой браузер. Таким образом, я смог поразить все возможности, необходимые для переключения системы на PDO для MSSQL. Думаю, я могу назвать это исправленным, но нерешенным.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …