Foros del Web » Programando para Internet » PHP »

Ayuda con fopen()

Estas en el tema de Ayuda con fopen() en el foro de PHP en Foros del Web. Hola a todos, es mi primera consulta en este foro, de ante mano les agradezco por cualquier ayuda que me puedan dar. Mi problema es ...
  #1 (permalink)  
Antiguo 03/11/2005, 14:20
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años
Puntos: 0
Ayuda con fopen()

Hola a todos, es mi primera consulta en este foro, de ante mano les agradezco por cualquier ayuda que me puedan dar.
Mi problema es el siguiente:
Necesito enviar información desde un equipo a otro (ubicados en lugares fÍsicos distantes), y lo tengo que hacer creando archivos planos (txt). Para eso use la función fopen("http://110.0.0.2/directorio_A/archivo.txt", "w+"). Al correr la aplicación me muestra la siguiente advertencia:
Warning: fopen("http://110.0.0.2/directorio_A/archivo.txt", "w+")): failed to open stream: HTTP wrapper does not support writeable connections. in /var/www/html/prueba/subir_vtas/cabecera-inc.php on line 73.
Debido a esto revise el archivo de configuración php.ini en lo siguiente:
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
allow_url_fopen = On

y por lo que veo esta encendido o habilitada la funcionalidad que permite realizar escritura lectura de archivos a traves del protocolo http.
No encuentro donde pueda tener el problema. Quedo a la espera de vuestra ayuda.
  #2 (permalink)  
Antiguo 03/11/2005, 14:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues ahí dice bien claro el problema ..
Cita:
"failed to open stream: HTTP wrapper does not support writeable connections. "
Por HTTP no puedes abrir un archivo para escribir en el ..

Si el archivo está en tu servidor .. NO uses llamada por HTTP (http://) .. usa una ruta absoluta (//var/www/html/directorio_A/archivo.txt o donde esté).

Un saludo,
  #3 (permalink)  
Antiguo 04/11/2005, 06:18
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años
Puntos: 0
Ok. Si se que allí dice claramente eso, la situación es. Porqué se produce eso.
Me es más claro lo que pones abajo, "Si el archivo está en tu servidor .. NO uses llamada por HTTP (http://)...". Lo que sucede es que necesito probar que se puede hacer, y no se me ocurrio que para probar esto necesariamente se debe hacer un un contexto real, es decir, desde una máquina a otra. Efectivamente está en el mismo servidor y efectivamente si se usa una ruta absoluta funciona sin problemas. Lo probaré de PC a PC, haber como me va. Muchas gracias por responder, te cuento luego como me fue.
  #4 (permalink)  
Antiguo 08/11/2005, 12:45
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años
Puntos: 0
Cumpliedo con lo prometido. Aun no me funciona el 100% pero he estado avanzando en el tema. Me indica que no estoy usando la función adecuada, tuve que usar fsockopen, pero también tiene sus complicaciones, en fin debo seguir investigando.
  #5 (permalink)  
Antiguo 08/11/2005, 13:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por ebaeza
Cumpliedo con lo prometido. Aun no me funciona el 100% pero he estado avanzando en el tema. Me indica que no estoy usando la función adecuada, tuve que usar fsockopen, pero también tiene sus complicaciones, en fin debo seguir investigando.
Pero .. realmente que necesitas hacer? ..

Necesitas aceder direcatamente a cierto archivo de cierto PC desde tu servidor .. "sin más"?

Ese "PC" remoto que quieres acceder; "sirve" ese archivo de alguna forma? .. por TPC/IP (HTTP?, FTP? .. tu própio puerto/formato ..?) ...

Un saludo,
  #6 (permalink)  
Antiguo 08/11/2005, 13:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años
Puntos: 0
Cita:
Iniciado por ebaeza
Necesito enviar información desde un equipo a otro (ubicados en lugares fÍsicos distantes), y lo tengo que hacer creando archivos planos (txt). Para eso use la función fopen...
Debo crear un archivo de texto desde PC A en el PC B con información de una BD ubicada en PC A. Ambos PC no estan en la misma Red, por eso necesito hacerlo por http.
  #7 (permalink)  
Antiguo 09/11/2005, 05:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues como te he comentado .. PC B tendría que tener un servidor FTP por ejemplo para hacer dicha taréa ... o podría ser un ActiveX que previa instalación confirmada y autorizada por el ususario del PC B una vez .. deje la "puerta abierta" para escribir cierto archivo en PC B.

NO puedes entrar en PC B sin alguna autorización .. como la dá un servidor FTP (instalado en ese PC B, configurando una cuenta de FTP con su usuario/password) .. O un ActiveX (más genérico) que igualmente previa autorización manual del usuario se dará autorización para lo que corresponda ..

El protocolo HTTP es para "servir" un archivo .. no permite "escritura" salvo que tu tuvieras en el PC B un servidor HTTP + PHP por ejemplo corriendo en el .. ahí podrías hacer un "PUT" de un archivo previa autenficiación si corresponde. Pero volvemos a lo mismo .. se necesita de "algo" más para todo el proceso instalado en ese PC B.

Un saludo,
  #8 (permalink)  
Antiguo 09/11/2005, 06:32
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años
Puntos: 0
Interesante aclaración, mira que me estaba guiando por el manual que tengo del php que si uno busca por fopen se encuentra con lo siguiente:

int fopen ( string filename, string mode [, int use_include_path])


Si filename comienza con "http://" (no es sensible a mayúsculas), se abre una conexión HTTP 1.0 hacia el servidor especificado y se devuelve un apuntador de fichero al comienzo del texto de respuesta.

Y luego da ejemplos, como este:
Ejemplo 1. Ejemplo de fopen()()

$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:[email protected]/", "w");

Entonces se ve como bastante simple, es solo entregarle los parametros correctos y listo, obviamente teniendo presente los resguardos de seguridad que correspondan.
También había pensado en un cliente de ftp, pero era mi segunda opción.
En fin, siempre es bueno compartir información, muchas gracias.
Saludos
  #9 (permalink)  
Antiguo 09/11/2005, 08:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pero .. fijate bien .. fopen() abre un "socket" .. un "socket" lo gestiona un "servidor" .. un programa que entregue ese dato por "TPC/IP" .. o el protocolo que corresponda.

Para que en tu caso .. en PC B pudieras acceder a un archivo a el por una llamada por HTTP://IP/archivo.tal .. tendrías que EJECUTAR en se "PC B" justamente un servidor HTTP .. ¿Tu tienes instalado en ese "PC B" un servidor HTTP? .. a todo esto .. en acceso remoto por el protocolo HTTP NO se puede usar fopen() en modo escritura .. sólo en Lectura (ese es el error que tenías en tus pruebas locales .. pero justamente todo te "funcionaba" por qué tu "servidor" y tu "cliente" era tu mismo PC el cual YA corrias (ejecutabas) un servidor HTTP .. ¿Te fijas?

Un saludo,
  #10 (permalink)  
Antiguo 09/11/2005, 12:48
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años
Puntos: 0
Correcto...en ambos PC tengo instaldo un servidor Apache, que funcionan perfecto. Respecto a que solo se puede leer y no escribir usando el protocolo HTTP no lo sabia y pense que el ejemplo ($fp = fopen("http://www.php.net/", "r");
) era solo eso, un ejemplo.
Bueno no queda más que usa FTP.
Gracias.
  #11 (permalink)  
Antiguo 09/11/2005, 13:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
mm Pero si ya tienes instalado en PC "B" un servidor HTTP .. seguro que podrás disponer de PHP en ambos? ..

Si es así, .. prueba e investiga sobre "Upload" de archivos por "PUT":
http://www.php.net/manual/es/feature...put-method.php

Podría ser esa tu solución .. pero no estoy seguro.

Un saludo,
  #12 (permalink)  
Antiguo 10/11/2005, 06:22
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años
Puntos: 0
Interesante alternativa, voy a investigar un poco más al respecto, ya que es poco lo que aparece en esa página. Se ve bien, aun no se si me podría servir para lo que estoy haciendo.
Gracias
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 22:02.