Проблема с CSV MIME Type не загружается через браузер - PullRequest
0 голосов
/ 18 мая 2011

Итак, сначала позвольте мне заявить, прежде чем вы начнете предоставлять другие предложения о том, как просто экспортировать полную таблицу в файл CSV, это не то, что я хочу сделать (мой демонстрационный код прямо сейчас предполагает это, но я просто тестирование всей загрузки через браузер шабаз).

На самом деле я хочу создать свой контент для экспорта из нескольких таблиц. тем не менее, я просто пытаюсь заставить экспорт и загрузку через браузер работать прямо сейчас.

Я получил этот код из примера в сети, и в настоящее время происходит просто распечатка данных в моем браузере.

вот мой код, который я тестирую:

$result = mysql_query("SELECT * FROM results_tb") or die(mysql_error());

    // I hard-code the column names so I can capitalize, add spaces, etc.
    $fields = '"User ID","Test_id","score %","Time taken"'."\n";

    // Iterate through the rows of data
    while ($row = mysql_fetch_assoc($result))
    {
        //echo $row['user_id'];
        $fields .= '"'.$row['user_id'].'","'.$row['test_id'].'","'.$row['score'].'","'.$row['time_elapsed'].'"'."\n";
    }

    // Set our headers
    header('Content-type: text/csv');
    // To display data in-browser, change the header below to:
    // header("Content-Disposition: inline");
    header("Content-Disposition: attachment; filename=event_registrations.csv");

    // Output our data
    echo $fields;

Я предполагаю, что этот пример - штаны, так может кто-нибудь объяснить мне, как это сделать?

большое спасибо: D

мой ответ заголовка пойман с firebug-Lite:

Date    Wed, 18 May 2011 14:15:18 GMT
X-Powered-By    PHP/5.1.6
Content-disposition attachment;filename=MyVerySpecial.csv
Connection  close
Content-Length  992
Server  Apache/2.2.3 (Red Hat)
Content-Type    text/csv

1 Ответ

0 голосов
/ 18 мая 2011

Полагаю, вы установили display_errors в выключенное состояние, и вы что-то выводите до того, как эти header() вызовы будут сделаны. Это вызвало бы поведение, которое вы видите.

Прежде всего, отредактируйте файл php.ini и убедитесь, что display_errors включен, и что в вашем скрипте PHP есть сообщения об ошибках (например, error_reporting(E_ALL);). Теперь вы, вероятно, получите ошибку на вашем экране. Что-то вроде:

Cannot send header information. Output already started by XXX.php (line YYY).

Вероятно, происходит то, что вы случайно отправляете пробел или символ новой строки перед отправкой команд header(), и вы подавляете ошибку. Когда вы отправляете что-либо в браузер перед этими header() вызовами, они будут игнорироваться. Таким образом, браузер будет просто отображать все, что вы отправляете, вместо того, чтобы позволить пользователю загрузить его.

Если вы используете Firefox, вы также можете использовать расширение Firebug для проверки заголовков HTTP-ответов вашей загрузки.

...