Existe una librería llamada libcurl en PHP la cual te permite usar sesiones cURL para realizar conexiones por HTTP, FTP y demás.
Esta librería se usar normalmente para acceder a una página web donde hay un formulario (realizar una conexión HTTP y mandar datos por le método POST). Por ejemplo, usando cURL puedes comentar en statuesque.es sin estar navegando por ella. Por eso se ponen los famosos captcha. Para que una máquina no pueda poner un comentario, por ejemplo.
Pues bien, hace poco me hicieron programar una función que pudiera escribir una cadena de texto en un archivo .xml pero me pusieron como condición no usar la función que tiene PHP para ello (fwrite()). Empecé a documentarme sobre cURL y aparte de abrírseme un mundo de posibilidades encontré una manera de hacerlo. Probablemente existan mejores formas para escribir en un archivo con cURL pero a mi solo se me ha ocurrido esta, si tienes alguna mejora puedes comentar que ten por seguro que la tendré en cuenta.
Ahora vamos al tema. Para usar la función hacen falta dos archivos: el archivo save.php que es el que tiene la función escrita y el archivo temp.php que es un archivo que usa la función.
En el archivo save.php escribiremos lo siguiente:
function curl_write($filename, $content) {
$path = 'http://' . $_SERVER['SERVER_NAME'] . substr($_SERVER['PHP_SELF'], 0, strlen($_SERVER['PHP_SELF']) - strlen(’save.php’)) . ‘temp.php’; //Para que reconozca solo la ruta. SIEMPRE que el .htaccess no haga de las suyas
$fp = fopen('./' . $filename, "w");
chmod('./' . $filename, 0777); //Aquí dale los permisos que quieras que tenga el archivo. Ahora todo el mundo puede cambiar su información.
$curl = curl_init(); //Inicializo la sesión cURL
curl_setopt($curl, CURLOPT_URL, $path); //Descargo el archivo con el contenido a escribir
curl_setopt($curl, CURLOPT_FILE, $fp); //Configuro la salida por defecto al archivo $fp
curl_setopt($curl, CURLOPT_HEADER, false); //Que no devuelva las cabeceras
curl_setopt($curl, CURLOPT_POST, true); //Para realizar una petición HTTP con el método POST
curl_setopt($curl, CURLOPT_POSTFIELDS, 'text=' . urlencode($content)); //Contenido de POST
if(curl_exec($curl)) //Ejecuto la conexión
$exito = true;
else
$exito = false;
curl_close($curl); //Cierro la conexión
fclose($fp); //Cierro el archivo
return $exito;
}
Y en el archivo temp.php escribiremos lo siguiente:
$texto = $_POST['text'];
echo $texto;
La función lo que hace es aprovecharse de que tú puedes poner como salida por defecto de una conexión un archivo de texto. Entonces realizamos una conexión a nuestro archivo temp.php y le pasamos por POST la variable text. El archivo temp.php lo que hace es sacar como contenido el valor de la variable text que le pasen por POST.
Una vez realizada la conexión a temp.php y devuelto el valor de la variable text se escribe en el archivo que le hayamos pasado y cerramos tanto la sesión cURL como el archivo que hemos abierto para escribir.
Un dato importante es que temp.php y save.php tienen que estar en el mismo directorio (o si cambias el directorio cambia también la variable $path para indicar donde se encontrará el archivo temp.php)
Un ejemplo de uso podría ser:
curl_write('diario.txt', 'Querido diario. He estado pensando y... ');
Puedes conseguir curl_write.rar aquí [rar].
Espero que os sea útil! Un saludo a todos!