PHP - error al intentar leer un file txt

 
Vista:

error al intentar leer un file txt

Publicado por julio (54 intervenciones) el 23/09/2008 23:29:17
Tengo la necesidad de leer achivos planos de textos. Y me surge lo siquiente:

El script es el tipico en dos partes: Al entrar por primera vez muestra el formulario para subir el archivo.
Desde Access exporto a un txt, al intentar leerlo me dá el siguiente error:

Warning: file(Consulta100.txt) [function.file]: failed to open stream: No such file or directory in C:AppServwww evision.php on line 38
Fila 0 :

Pero si a ese mismo TXT lo copio y voy a leerlo, lo lee sin ningún problema. Intente usar la variable global $_FILES['$arhivo']['name'], pero sin exito.

No se que puede ser el problema que a un txt recien creado me dé error al leerlo.

Aqui va el script. Agradeceré quien me pueda ayudar.

Tiene que ver que sea Win Xp? o hay algun secreto en el script que estoy pasando por alto?

<?
if ($recibe=="")
{
?>
<form method="POST" action="<? echo $PHP_SELF?>" enctype="multipart/form-data">
<table border="0" width="100%">
<tr>
<td width="100%" colspan="2"> ingrese el archivo que desea enviar al servidor</td>
</tr>
<tr>
<td width="21%"> <p align="right">Archivo: </td>
<td width="79%"><input type="file" name="archivo" size="30"></td>
</tr>
<tr>
<td wdth="21%"></td>
<td width="79%"><input type="submit" value="Enviar" name="recibe"></td>
<td ><input type="hidden" name="MAX_FILE_SIZE" value="80804096"></td>

<?
}
else
{

echo "vine por aqui <br>";
echo "es el nombre del archivo.....: $archivo_name <br><br>";

$Matriz_file=file($archivo_name); // Aqui lee el archivo, y es la instruccion que dá el error

// echo "es la prueba ", $_FILES["archivo"]["name"];
// $Matriz_file=file($_FILES['$arhivo']['name']);



for ($i=0;$i<count($Matriz_file);$i++)
{
echo "Fila $i : $Matriz_file[$i]<br>";

}
}

?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:error al intentar leer un file txt

Publicado por Diego Romero (1450 intervenciones) el 24/09/2008 00:23:48
Tienes que sacar el archivo de los temporales del servidor web antes de poder usarlo.

Lee esto:
http://lawebdelprogramador.com/news/mostrar_new.php?id=71&texto=PHP&n1=505508&n2=1&n3=1&n4=1&n5=1&n6=1&n7=1&n8=1&n9=1&n0=0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:error al intentar leer un file txt

Publicado por julio (54 intervenciones) el 24/09/2008 01:25:57
Te agradezco infinitamente. Lei lo que me indicaste, pero como lo hago?... no me queda claro como hacerlo. Por favor si podes aclararme un poquito mas.
En funcion de lo que me dijiste el otro dia, estuve tratando de apuntar por ahi, pero en la bibliografia que tengo no lo de esta forma y en la Web no pude aclararme.
Por favor si puedes decirme como leo la matriz $_File?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:error al intentar leer un file txt

Publicado por Diego Romero (1450 intervenciones) el 24/09/2008 09:42:40
A ver...

En el ejemplo que pongo a continuación, asumo que el input de tipo file se llama "archivo", igual a como está en el código HTML que posteaste en el primer mensaje.

<?php
$nombre_temporal=$_FILES["archivo"]["tmp_name"];
$nombre_real=$_FILES["archivo"]["name"];

if ($_FILES["archivo"]["error"] == 0) {
copy($nombre_temporal,"/".$nombre_real);
$lineas = array();
$fh = fopen("/".$nombre_real,"r");
while (!eof($fh)) do {
$lineas[] = trim(fgets($fh));
}
fclose($fh);
}
else {
echo "error al recibir archivo ".$nombre_real;
exit;
}
?>

Tomo el nombre temporal del archivo como lo indica el servidor.
Tomo el nombre real del archivo tal como lo envió el cliente.
Verifico si hubo error de transferencia. Si no lo hubo (error = cero) copio el archivo temporal hacia el directorio home de la página web renombrándolo con el nombre real.
Creo un array vacío.
Abro el archivo que acabo de copiar en modo lectura.
Mientras no sea fin de archivo leo una línea del archivo y se la asigno a la matriz. De esta forma por cada línea del archivo se crea un item en el array cuyo índice será numérico comenzando por cero.
Cuando se alcance el fin de archivo cierro el archivo.
Si hubo error muestro un mensaje y termino el script.
Si se llega hasta aquí en $lineas tienes el contenido del archivo separado línea por línea para que hagas lo que quieras con ellas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:error al intentar leer un file txt

Publicado por julio (54 intervenciones) el 24/09/2008 18:44:31
Te envio el script, como me ha quedado con las lineas que me diste. No me funciona, sale por el brazo del else errror al recibir el archivo.
.
<?
if ($enviar=="")
{
?>
<form method="POST" action="<? echo $PHP_SELF?>" enctype="multipart/form-data">
<table border="0" width="100%">
<tr>
<td width="100%" colspan="2"> ingrese el archivo que desea enviar al servidor</td>
</tr>
<tr>
<td width="21%"> <p align="right">Archivo: </td>
<td width="79%"><input type="file" name="archivo" size="30"></td>
</tr>
<tr>
<td wdth="21%"></td>
<td width="79%"><input type="submit" value="Enviar" name="enviar"></td>
<td ><input type="hidden" name="MAX_FILE_SIZE" value="4096"></td>

<?
}
else
{
$nombre_temporal=$_FILES["archivo"]["tmp_name"];
$nombre_real=$_FILES["archivo"]["name"];

if ($_FILES["archivo"]["error"] == 0)
{
copy($nombre_temporal,"/".$nombre_real);
$lineas = array();
$fh = fopen("/".$nombre_real,"r");
do
{
$lineas[] = trim(fgets($fh));
} while (!eof($fh));

fclose($fh);
}
else
{
echo "error al recibir archivo ".$nombre_real;
}
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:error al intentar leer un file txt

Publicado por julio (54 intervenciones) el 24/09/2008 23:44:49
Con los ajustes que me has sugerido: inicializco
$nombre_temporal=$_FILES['archivo']['tmp_name'];

y luego desde esa variable cargo $matriz_file=file($nombre_temporal) con todas la lineas del archivo.
Cuando pongo $matriz_file=file($_FILES['archivo']['tmp_name']); a veces lee y otras no.
Inicializando en una variable $nombre_temporal y luego desde esa variable leo el archivo, funciona. Pero hay una sorpresa:

Dentro de todo funciona. Y porque digo dentro de todo: Ahora creo un nuevo txt y voy a leerlo y lo lee perfectamente.

Pero tengo un txt que lo cree de las misma forma que los otros, además tiene las mismas lineas, y a ESE UNICO TXT se rehusa a leerlo. Me gustaria saber porque ese comportamiento?, para poder tomar las precauciones del caso.

echo "<br> Nombre: $archivo_name <BR><br>";
echo "Tamaño: $archivo_size <BR><br>";
echo "Tipo: $archivo_type <BR><br>";
Con ese TXT la unica variable que se inicializa es $archivo_name, las demas quedan en blanco. Para CUALQUIER OTRO txt, FUNCIONA MUY BIEN.

<?
if ($enviar=="")
{
?>
<form method="POST" action="<? echo $PHP_SELF?>" enctype="multipart/form-data">
<table border="0" width="100%">
<tr>
<td width="100%" colspan="2"> ingrese el archivo que desea enviar al servidor</td>
</tr>
<tr>
<td width="21%"> <p align="right">Archivo: </td>
<td width="79%"><input type="file" name="archivo" size="30"></td>
</tr>
<tr>
<td wdth="21%"></td>
<td width="79%"><input type="submit" value="Enviar" name="enviar"></td>
<td ><input type="hidden" name="MAX_FILE_SIZE" value="9086000 "></td>

<?
}
else
{

$nombre_temporal=$_FILES['archivo']['tmp_name'];
echo "Nombre Temporal...:",$nombre_temporal,"<br>";


echo "<br> Nombre: $archivo_name <BR><br>";

echo "Tamaño: $archivo_size <BR><br>";

echo "Tipo: $archivo_type <BR><br>";

$matriz_file=file($nombre_temporal);

//echo $archivo_size, "<br>";

$nombre_real=$_FILES['archivo']['name'];

if ($_FILES['archivo']['error'] == 0)
{
for ($i=0; $i<count($matriz_file);$i++)
{
echo "fila $i ",$matriz_file[$i],"<br>";
}
}
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:error al intentar leer un file txt

Publicado por Diego Romero (1450 intervenciones) el 25/09/2008 06:52:55
La variable $_FILES["archivo"]["error"] está para algo, para diagnosticar errores. Además en el código del mensaje anterior tenías MAX_FILE_SIZE a solo 4 Kb de tamaño.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar