Foros del Web » Programando para Internet » PHP »

Error con fgets() que no se manifiesta en local

Estas en el tema de Error con fgets() que no se manifiesta en local en el foro de PHP en Foros del Web. Hola a todos! He realizado una página en php que me lee un .txt y me lo escribe en la web. Trabajando en local con ...
  #1 (permalink)  
Antiguo 30/03/2004, 14:51
 
Fecha de Ingreso: marzo-2004
Mensajes: 13
Antigüedad: 13 años, 8 meses
Puntos: 0
Error con fgets() que no se manifiesta en local

Hola a todos!

He realizado una página en php que me lee un .txt y me lo escribe en la web.

Trabajando en local con Windows2000 y IIS me funciona bien, pero al colgar la web en una máquina linux me da el siguiente error:

Warning: Wrong parameter count for fgets() in /home/httpd/vhosts/mizares.com/httpdocs/planeta_carta.php on line 60

Warning: Wrong parameter count for fgets() in /home/httpd/vhosts/mizares.com/httpdocs/planeta_carta.php on line 63

Warning: Wrong parameter count for fgets() in /home/httpd/vhosts/mizares.com/httpdocs/planeta_carta.php on line 66

Warning: Wrong parameter count for fgets() in /home/httpd/vhosts/mizares.com/httpdocs/planeta_carta.php on line 74

Warning: Wrong parameter count for fgets() in /home/httpd/vhosts/mizares.com/httpdocs/planeta_carta.php on line 77

Warning: Wrong parameter count for fgets() in /home/httpd/vhosts/mizares.com/httpdocs/planeta_carta.php on line 80

El código de la páguna php es:

<?php
session_start();
?>
<HTML>
<HEAD>
<style>
BODY {
background-attachment : fixed;
background-image : url(http://www.mizares.com/imatges/planeta_carta1.jpg);
background-position : center;
background-repeat : no-repeat;
scrollbar-arrow-color:#67581B;
scrollbar-track-color:white;
scrollbar-shadow-color:#67581B;
scrollbar-face-color:#E2CC81;
scrollbar-highlight-color:#E6E6E6;
scrollbar-darkshadow-color:white;
scrollbar-3dlight-color:white;
}
H2 {
color : "#733C1A";
font : bold italic;
}
H3 {
color : "#733C1A";
font : bold;
}

</style>
</HEAD>
<BODY>
<img src="imatges/logo_carta2.jpg" alt="" border="0">
<?php

//si $_GET ['tipo'] = 1 es una tertulia y si es 2 es una seleccion

//recuperamos dato de la página anterior
$numTertulia = $_GET ['numTertulia'];

$strArchivo = "atrasados/" . $numTertulia; //nombre de archivo a mostrar
$strSelecc = "tertulia_en_mizar/selecciones/" . $numTertulia; //nombre de seleccion a mostrar

if ($_GET ['tipo'] == 1) //Es un num publicado...
{
$strNombreArchivo = $strArchivo;
}
elseif ($_GET ['tipo'] == 2) //ES una seleccion
{
$strNombreArchivo = $strSelecc;
}



//abrimos el fichero

$fd = fopen($strNombreArchivo, 'r');

If (!feof($fd))
{
$buffer = fgets($fd); //Lee pero no se escribe "Mizares"
echo "<h1> </h1>\n<br>\n";

$buffer = fgets($fd); //Escribe "La Tertulia en Mizar"
echo "<h2>",$buffer,"</h2>\n<br>\n";

$buffer = fgets($fd); //Escribe la fecha
echo "<table align='left' width='85%' border='0'>\n<tr>\n<td>\n<h2>\n", substr($buffer,0,30),"</h2>\n</td>\n<td align='right'>\n<h2>\n";
if ($_GET ['tipo'] == 1)
{
echo substr($buffer,-15); //Si no es seleccion y es una tertulia hay que poner el número de tertulia
}
echo "</h2>\n</td>\n</tr>\n</table>\n<br><br>\n";

$buffer = fgets($fd); //Escribe un espacio en blanco
echo $buffer,"\n<br>\n";

$buffer = fgets($fd); //Escribe un espacio en blanco
echo $buffer,"\n<br>\n";

$buffer = fgets($fd); //Escribe el "Temario"
echo "<h3><U>",$buffer,"</U></h3><br>";

echo "<table width='80%' align='center'><tr><td>";

//Leemos el fichero linea a linea y lo imprimimos en la web
while (!feof($fd))
{
$buffer = fgets($fd);
echo $buffer . "<br>";
}
echo "</td></tr></table>";
}

fclose($fd);

?>

</BODY>
</HTML>


Os agradeceré cualquier ayuda que me podáis prestar.

Muchas gracias!
  #2 (permalink)  
Antiguo 30/03/2004, 15:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Parece que tu fopen() no está abriendo el archivo (pero deberías ver un mensaje de error en consecuencia .. dependiendo del nivel de errores que deje visualizar la configuración de ese servidor ...)

De todas formas .. Linux suele requerir rutas absolutas completas.

Intenta usar rutas absolutas tipo:

Código PHP:
$strArchivo "./atrasados/" $numTertulia//nombre de archivo a mostrar
$strSelecc "./tertulia_en_mizar/selecciones/" $numTertulia//nombre de seleccion a mostrar 
O bien:

Código PHP:
$strArchivo "/home/httpd/vhosts/mizares.com/httpdocs/atrasados/" $numTertulia//nombre de archivo a mostrar
$strSelecc "/home/httpd/vhosts/mizares.com/httpdocs/tertulia_en_mizar/selecciones/" $numTertulia//nombre de seleccion a mostrar 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 01/04/2004, 15:20
 
Fecha de Ingreso: marzo-2004
Mensajes: 13
Antigüedad: 13 años, 8 meses
Puntos: 0
Gracias por el consejo Cluster, pero ya he hecho el cambio a direcciones absolutas como dijiste y me da exactamente el mismo error.

Alguna otra idea?
  #4 (permalink)  
Antiguo 01/04/2004, 15:30
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
fgets usa dos parametros: el descriptor del fichero y el tamaño en bytes a leer, te falta el segundo, quiza en windows te asume alguno por defecto.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #5 (permalink)  
Antiguo 01/04/2004, 15:52
 
Fecha de Ingreso: marzo-2004
Mensajes: 13
Antigüedad: 13 años, 8 meses
Puntos: 0
Jo... no pensé que en linux me exiguera el 2º parámetro!

Menuda tontería!

Y eso que en el manual de PHP.Net no sale que en linux se deba hacer eso!

Muchas gracias!

Solucionado!
  #6 (permalink)  
Antiguo 01/04/2004, 15:55
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
en linux siempre exige todos los parametros y que el tipo de datos del valor pasado como parametro, coincida con el que la funcion necesita.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #7 (permalink)  
Antiguo 02/04/2004, 05:35
 
Fecha de Ingreso: marzo-2004
Mensajes: 13
Antigüedad: 13 años, 8 meses
Puntos: 0
Aaaahhh...

Pues es una pena, porque te obliga a acotar la linea, y si lees un txt que tiene lineas enormes ya no puedes... si hubiera un parámetro que te dijera "hasta el final de la linea"... un -1 o algo...
  #8 (permalink)  
Antiguo 02/04/2004, 07:29
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
no te obliga a acotar la linea. El segundo parametro es para el caso en que desees sacar un numero determinado de bytes y no la linea completa ni tampoco todo el archivo, si tienes lineas muy grandes este segundo parametro puede ser lo suficientemente alto para que no te corte una linea, por ejemplo el total de bytes del archivo.

te dejo esto del manual de php para que me entiendas mejor:

fgets()
Devuelve una cadena de como mucho length - 1 bytes leidos del fichero apuntado por fp. La lectura acaba cuando son leidos length - 1 bytes, cuando se llega a una nueva línea (el caracter de nueva línea se incluye en el valor devuelto), o cuando se llega a un EOF (lo que ocurra primero).

Ademas encuentro bueno que el interprete te obligue a usar las funciones tal como fueron definidas.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #9 (permalink)  
Antiguo 02/04/2004, 11:21
 
Fecha de Ingreso: marzo-2004
Mensajes: 13
Antigüedad: 13 años, 8 meses
Puntos: 0
Gracias por la inclusión de manual, aunque como puedes ver más arriba, ya había consultado el manual de PHP.net

Por eso digo que es una pena que en IIS te permita prescindir del 2º parámetro y en linux no. Creo que le da menos plasticidad a la función, pero claro... todo son opiniones!
  #10 (permalink)  
Antiguo 02/04/2004, 11:41
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
no es que IIS permita prescindir del segundo parametro, pues con apache y php en windows pasa lo mismo. Aunque pensandolo bien en windows tengo Apache 2 y php 4.3.2, y en Linux tengo Apache2 y php 4.3.4. Quiza la diferencia lo esté haciendo la version de php.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #11 (permalink)  
Antiguo 02/04/2004, 11:45
 
Fecha de Ingreso: marzo-2004
Mensajes: 13
Antigüedad: 13 años, 8 meses
Puntos: 0
Pos no lo sé...

Mi versión de PHP es la misma que la de mi servidor, y al ejecutarlo en IIS no me daba error, sino que sin el 2º parámetro me representaba bien la página...

Supongo que por eso lo achaco a un tema de IIS quizás... y más sime dices que en APACHE también te petaba.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:55.