Código PHP para importar file de PC a sitio Web

Necesito exportar un file.txt alojado en mi PC a un sitio remoto, de manera frecuente, ya que actualizará una base de datos del sitio.

He utilizado el siguiente código:

$csvfile = "C:\FWEBTXN.txt";
$handle = fopen($csvfile, "r")

En mi localhost, funciona bien, pero el remoto me da error.

¿Cuál es el código que debo poner en mi PHP?

1 Respuesta

Respuesta
1

La diferencia es que en localhost el archivo se encuentra en "C:/" sin embargo en el servidor no.
Creo que antes de procesar el archivo debes subirlo al servidor por medio de un formulario:
Tu script quedaría así:

--------------------

¿

<?php

if(count($_FILES)>0 &&$_FILES['archivo']['error']==0){
$csvfile=uniqid().".txt";
move_uploaded_file($_FILES['archivo']['tmp_name'],$csvfile);

$handle = fopen($csvfile, "r");

//aquí va tu código para procesar el archivo.

}
?>
<form method='POST' enctype="multipart/form-data">
<input type='file' name='archivo' />
<input type='submit' value='subir y procesar'/>
</form>

--------------------
Comentame si esto solucionó tu problema.

Muchas gracias por tu colaboración.

puse tu formulario y este código como prueba:

<?php
if(count($_FILES)>0 &&$_FILES['archivo']['error']==0){
$csvfile=uniqid().".txt";
move_uploaded_file($_FILES['archivo']['tmp_name'],$csvfile);
$handle = fopen($csvfile, "r");
fclose($handle);
}
?>

Y dio estos errores:

Warning: uniqid() expects at least 1 parameter,

Warning: move_uploaded_file(.txt): failed to open stream: Permission denied

Warning: fopen(): Unable to access .txt

Warning: fopen(.txt): failed to open stream: No such file or directory

Para solucionar el primer warning tenes que cambiar:

$csvfile=uniqid().".txt";

por esto:

[email protected]().".txt";

El segundo, tercer y cuarto warning son consecuencias de la función: move_uploaded_file.
Esta función por si no lo sabes hace lo siguiente:
Cuando se postea un archivo en un form "<input type='file' />" el servidor lo aloja en un directorio temporal.

Move_upload_file se encarga de copiar ese archivo temporal al directorio que le especifiquemos en el segundo parámetro. Como solo le pusimos el nombre del archivo, este se copia en el mismo directorio donde esta el script php.

El warning se debe a que el script no tiene permisos para crear un archivo el directorio.
Y al no poder crearlo se desencadenan los demás warnings.
Para solucionar esto debes darle permiso de escritura al directorio donde es encuentra el script. Esto lo podes hacer mediante el filezilla o si tenes acceso a consola mejor.

Espero que esto te sirva de ayuda para que puedas hacer andar el script.

Cualquier inconveniente estamos en contacto.

Vuelvo a agradecerte tu colaboración.

Tengo acceso por Filezilla, puedes indicarme como darle el permiso?

Ya que sólo lo uso para subir mis script y htm.

Gracias de nuevo:

PS: El problema radica en enviar el file a donde esta el script Php. Ya que he copiado el file con filezilla y el script funcionó perfecto, Pero necesito que se haga automáticamente.:

<br class="scayt-auto" data-scayt_autocorrection="verdad" data-scayt_autocorrected="verda" />exacto como el script no tiene permisos para escribir sobre la carpeta no puede copiar el archivo.

Para cambiar los permisos de escritura podes usar filezilla, parate sobre el directorio donde esta el script (en el lado servidor), hacele botón derecho -> "permisos de archivos.." -> y donde dice valor numérico ponele 777.

Aclaración:

SI el directorio en cuestión es el directorio raíz del server (public_html) conviene no tocarle los permisos y hacer dentro de él un directorio nuevo (ej: csv) y a esa nueva carpeta le cambiamos los permisos a 777.

Y en el código debemos cambiar:

[email protected]().".txt";

por:

$csvfile="csv/"[email protected]().".txt";

Contame como te fue

Perfecto, funcionó. Genio. Muchas gracias.

Una última consulta: Existe la manera que el formulario que transfiere el file, no tenga que indicarse de donde debe importar el file, sino que siempre lo haga de la misma dirección?.


Acá dejo el código para quien lo necesite:

<?php
if(count($_FILES)>0 &&$_FILES['archivo']['error']==0)
{
[email protected]().".txt";
move_uploaded_file($_FILES['archivo']['tmp_name'],$csvfile);
$handle = fopen($csvfile, "r");

//aquí va el código para procesar el archivo.
}
?>

//formulario para trasnferir el file
<form method='POST' enctype="multipart/form-data">
<input type='file' name='archivo' />
<input type='submit' value='subir y procesar'/>
</form>

Acordarte que el HTML se ejecuta en el navegador (cliente).

No se puede dar un valor por defecto a los campos INPUT FILE, ya que
hacen referencia a una ruta física local y podrían surgir problemas de
seguridad.

Si siempre se va a subir el archivo desde la misma pc al servidor y esa pc tiene php instalado (localhost), se puede hacer un script en localhost que suba el archivo al servidor y luego ejecute el script en el servidor.

Te resumo la idea para que investigues:

Script en el localhost:

¿
<?
//script sencillo para subir un archivo por ftp
//datos de conexion ftp:
$host = "";
$puerto ="21";
$usuario = "";
$clave = "";
$ruta_destino="";//es relativa al directorio raiz
$archivo="C:/text.txt";//archivo a subir con la ruta local completa ej:C:/text.txt
 $id_ftp=ftp_connect($host,$puerto);
 ftp_login($id_ftp,$usuario,$clave);
 ftp_pasv($id_ftp,true);
 ftp_put($id_ftp,$ruta_destino,$archivo,FTP_BINARY);
// Con el codigo anterior se evita el formulario y tambien la funciona move_upload_file(), 
// El archivo ya se encuentra en el servidor ahora para correr el script del servidor que trata el archivo
// ejecutamos el siguiente comando:
$url_script_remoto = "http://www.misitio.com/miscript.php"; //ejemplo
$html = file_get_content($url_script_remoto);
// En tu caso html no contiene nada, pero contendra todo el html generado 
//Por el php del mismo modo que si fuera consultado desde el navegador
?>

Y en el script php del servidor ira solo el código para procesar el archivo:

 $handle = fopen("text.txt", "r");

Con esto tenes para investigar y automatizar tu script.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas