Pregunta

Tratando de usar filegetcsv para analizar un archivo CSV y hacer cosas con él, utilizando el siguiente código que se encuentra en Internet, incluido el Definición de la función PHP página:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        print_r($data);
    }
    fclose($handle);
}

Pero el código me da un bucle infinito de advertencias en el $data = línea:

PHP Warning: fgetcsv() expects parameter 1 to be resource, boolean given in...
  1. Sé que el archivo que estoy abriendo es un archivo válido, porque si agrego un carácter ficticio al nombre del archivo, obtengo un error diferente y no hay bucle.
  2. El archivo está en una carpeta con permisos completos.
  3. No estoy usando un CSV generado por un Excel en Mac (Hay un error peculiar)
  4. PHP versión 5.1.6, por lo que no debería haber ningún problema con la función
  5. Sé que el archivo no es demasiado grande o malformado, porque seguí reduciendo el archivo original para ver si eso era un problema y finalmente solo creé un archivo personalizado en el bloc de notas con nada más de dos líneas como:

    Value1a, value1b, value1c, value1d

Todavía bucle y sin dar datos. Aquí está el código completo con el que estoy trabajando ahora (usando una variable que es mayor que la cantidad de líneas para que pueda demostrar que se inclinaría infinitamente sin darle a mi servidor un bucle infinito)

if ($handle = fopen($_SERVER['DOCUMENT_ROOT'].'/tmp/test-csv-file.csv', 'r') !== FALSE) {
    while ((($data = fgetcsv($handle, 1000, ',')) !== FALSE) && ($row < 10)) {
        print_r($data);
        $row++;
    }
    fclose($handle);
}

Así que realmente tengo dos preguntas.

1) ¿Qué podría estar pasando por alto que está causando este bucle? Estoy medio confontado, es algo realmente "palma de cara" simple ...

2) ¿Por qué es el código recomendado para esta función algo que puede causar un bucle infinito si el archivo existe pero hay algún problema desconocido? Hubiera pensado el propósito del !== FALSE Y así sucesivamente sería evitar ese tipo de cosas.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top