Errore di ritorno PHP quando si utilizza fgetcsv [duplicato]
Domanda
Eventuali duplicati:
mysql_fetch_array () si aspetta parametro 1 per essere risorsa, boolean given in selezionare
Ciao Sto cercando di elaborare un csv con fgetcsv ma ??io tutto sto andando è un ciclo infinito di errori
Attenzione: fopen ( "mattonelle", "Utente" ...) in testcsv.php sulla linea 5
Attenzione: fgetcsv () si aspetta parametro 1 per essere risorsa, boolean given in /home/ratena/public_html/proc_files/testcsv.php sulla linea 6
<?php
$uploadcsv = "/home/ratena/public_html/temp/files/BatchLoadPM15.csv";
$filecsv = file_get_contents($uploadcsv);
//$batchid = $_POST['batchid'];
$handle = fopen("$filecsv", "r");
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {
print_r($data);
}
?>
Soluzione
questa parte avendo problema
/* this is un-necessary */
$filecsv = file_get_contents($uploadcsv);
/* this expecting a file in */
$handle = fopen("$filecsv", "r");
Prova sostituire le 3 linee proprio con questo
$handle = fopen($uploadcsv, 'r');
Per passare prima riga
$column_headers = array();
$row_count = 0;
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE)
{
if ($row_count==0)
{
$column_headers = $data;
}
else
{
print_r($data);
}
++$row_count;
}
Altri suggerimenti
Si sta scaricando il file CSV in una stringa di $filecsv
e l'utilizzo di questa stringa come il nome del file in fopen
!!
Non c'è bisogno di scaricare il file, basta passare il nome del file CSV per fopen
.
Inoltre ricordatevi di controllare il valore di ritorno di fopen
sempre prima di andare avanti e leggere.
$uploadcsv = "/home/namebob/public_html/temp/files/BatchLoadPM15.csv";
// try to open the file.
$handle = fopen($uploadcsv, "r");
// error checking.
if($handle === false) {
die("Error opening $uploadcsv");
}
// to skip the header.
$skip = true;
// file successfully open..now read from it.
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {
// if header..don't print and negate the flag.
if($skip) {
$skip = !$skip;
// else..print.
} else {
print_r($data);
}
}
E 'perché si sta cercando di aprire il contenuto di un file, piuttosto che il nome del file. Rimuovere la linea file_get_contents
, e sostituire la chiamata fopen
con:
$handle = fopen($uploadcsv, 'r');
che dovrebbe farlo ...
appare come la prima riga contiene le intestazioni. Skip fila uno.