Pues no me había dado cuenta. He intentado correr tu código y me he encontrado con diversos problemas:
- Cuando usas un formulario html para subir un fichero al servidor, este se almacena en una ruta temporal dentro del servidor. Para poder trabajar con el fichero necesitamos tenerlo en una ruta determinada, podemos crear una carpeta con un nombre que ponemos nosotros y en una ruta conocida por nosotros para almacenar el fichero y poder trabajar con él.
- La función fopen trabaja con rutas, no directamente con ficheros.
El código que he conseguido hacer funcionar es este (he dejado comentadas las partes correspondientes a base de datos, simplemente he comprobado que se suba el fichero al servidor y que se rescate la información contenida en el fichero; ten en cuenta que para que funcione tienes que crear una carpeta denominada ficheros en la misma ruta donde tengas el archivo php):
<?php
//$conexion=pg_connect("host=localhost port=5432 user=postgres password=prestaciones dbname=prueba");
if(isset($_POST['submit'])) {
// Recoge el nombre del fichero que se habrá indicado en el formulario
$fichero = $_FILES["fichero"]["name"];
// Recoge la ubicación temporal del fichero en el servidor
$fichero_tmp = $_FILES["fichero"]["tmp_name"];
// Comprueba que se ha indicado un fichero en el formulario
if ($fichero == "") {
echo "¡Error! No se ha especificado ningún fichero\n";
return;
}
// Ruta completa (incluido el nombre del fichero), necesaria para usar fopen; hemos creado una carpeta denominada ficheros
//La carpeta ficheros está en la misma ubicación que el script
$destino = "./ficheros/" . $fichero;
// Copia el fichero al directorio de nuestro servidor, cogiéndolo de la ubicación temporal
if (move_uploaded_file($fichero_tmp, $destino)) {
echo "El fichero se ha subido al servidor correctamente\n";
}
else {
echo "Se ha producido un error al subir el fichero\n";
}
// NO ES CORRECTO $fichero =$_POST['fichero'];
$handle = fopen("$destino", "r");
while (($data = fgetcsv($handle, 18192, ";")) !== FALSE)
{
/* $import="INSERT INTO prueba (id_prueba,montoneto,montodisponible) VALUES ('$data[0]','$data[1]','$data[2]')";
pg_query($import) or die(pg_last_error()); */
echo 'Obtenidos los datos: '. $data[0].', '. $data[1].' ,'. $data[2];
var_dump($data);
}
fclose($handle);
print "Import done";
}
else
{
print "<form action='enviar_csv.php' enctype='multipart/form-data' method='post' >";
print "Type file name <strong class='highlight'>to</strong> import:<br>";
print "<input type='file' name='fichero' size='20'><br>";
print "<input type='submit' name='submit' value='submit'></form>";
}
?>
Espero te sirva!