php header - Come usare il tipo MIME CSV?





to content (5)


Con Internet Explorer è spesso necessario specificare il Pragma: anche l'intestazione pubblica per il corretto funzionamento del download.

header('Pragma: public');

Solo i miei 2 centesimi

In un'applicazione Web su cui sto lavorando, l'utente può fare clic su un collegamento a un file CSV. Non c'è un'intestazione impostata per il tipo mime, quindi il browser lo rende semplicemente come testo. Vorrei che questo file fosse inviato come un file .csv, quindi l'utente può aprirlo direttamente con calc, excel, gnumeric, ecc.

header('Content-Type: text/csv');
echo "cell 1, cell 2";

Questo codice funziona come previsto sul mio computer (non è così che è sempre?) Ma non funziona su un altro computer.

Il mio browser è una build notturna di FF 3.0.1 (su linux). I browser in cui non funzionava erano IE 7 e FF 3.0 (su Windows)

Ci sono dei capricci di cui non sono a conoscenza?




Potresti provare a forzare il browser ad aprire una finestra di dialogo "Salva con nome ..." facendo qualcosa come:

header('Content-type: text/csv');
header('Content-disposition: attachment;filename=MyVerySpecial.csv');
echo "cell 1, cell 2";

Che dovrebbe funzionare sulla maggior parte dei principali browser.




Questo codice può essere utilizzato per esportare qualsiasi file, incluso CSV

// application/octet-stream tells the browser not to try to interpret the file
header('Content-type: application/octet-stream');
header('Content-Length: ' . filesize($data));
header('Content-Disposition: attachment; filename="export.csv"');



Non stai specificando una lingua o un framework, ma la seguente intestazione viene utilizzata per il download di file:

"Content-Disposition: attachment; filename=abc.csv"



Penso che se qualcuno vuole usare PHP e MySQL o qualche altro server dataBase:

  1. Pensa all'apprendimento di PDO (PHP Data Objects): si tratta di un livello di accesso al database che fornisce un metodo uniforme di accesso a più database.
  2. Pensa all'apprendimento di MySQLi
  3. Usa le funzioni native di PHP come: strip_tags , mysql_real_escape_string() o se variabile numerica, solo (int)$foo. Leggi di più sul tipo di variabili in PHP here . Se stai usando librerie come PDO o MySQLi, usa sempre PDO::quote() e mysqli_real_escape_string() .

Esempi di librerie:

---- DOP

----- Nessun segnaposto - maturo per l'iniezione SQL! È cattivo

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values ($name, $addr, $city)");

----- Segnaposto senza nome

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values (?, ?, ?);

----- Segnaposto con nome

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) value (:name, :addr, :city)");

--- MySQLi

$request = $mysqliConnection->prepare('
       SELECT * FROM trainers
       WHERE name = ?
       AND email = ?
       AND last_login > ?');

    $query->bind_param('first_param', 'second_param', $mail, time() - 3600);
    $query->execute();

PS :

DOP vince questa battaglia con facilità. Con il supporto di dodici diversi driver di database e parametri con nome, possiamo ignorare la piccola perdita di prestazioni e abituarci alla sua API. Dal punto di vista della sicurezza, entrambi sono sicuri fino a quando lo sviluppatore li usa come dovrebbero essere usati

Ma mentre sia PDO che MySQLi sono piuttosto veloci, MySQLi ha prestazioni insignificanti più veloci nei benchmark: ~ 2,5% per le dichiarazioni non preparate e ~ 6,5% per quelle preparate.

E per favore prova ogni query nel tuo database - è un modo migliore per prevenire l'iniezione.





php csv http-headers mime