Escuché que file_put_contents sobrescribe el archivo si existe. Eso es lo que quiero pero no funciona. ¿Qué hacer?
$contentsAnnonces = file_get_contents("http://website1.fr/file.xml");
$filename = "http://website2.fr/file.xml";
file_put_contents($filename, $contentsAnnonces);
Error :
El archivo remoto ya existe y la opción de contexto de sobrescritura no está especificada
Respuesta1
No puedes escribir en HTTP usando file_put_contents()
.
Desde elfile_put_contents()
documentación:
Se puede utilizar una URL como nombre de archivo con esta función si elenvoltorios abiertoshan sido habilitados. Verabrir()para obtener más detalles sobre cómo especificar el nombre del archivo. Ver elProtocolos y envoltorios admitidospara obtener enlaces a información sobre las capacidades que tienen los distintos contenedores, notas sobre su uso e información sobre las variables predefinidas que puedan proporcionar.
Y deDescripción de PHP del protocolo HTTP(el énfasis es mío):
Permiteacceso de solo lecturaa archivos/recursos a través de HTTP 1.0, utilizando el método HTTP GET.
file_put_contents()
escribe en un archivo, pero no puede hacerlo a través de HTTP porque el contenedor solo puede leer HTTP usando GET.
Necesita un enfoque diferente para lograr lo que desea.
Desde la raíz del documento de website2.fr
, puede escribir un script que escriba file.xml
después de recuperar el archivo http://website1.fr/file.xml
.
Ejemplo:
<?php
$contentsAnnonces = file_get_contents("http://website1.fr/file.xml");
file_put_contents(ORIGINE_DU_DOCUMENT . "/file.xml", $contentsAnnonces);
… ¿dónde ORIGINE_DU_DOCUMENT
está la ruta a la raíz del documento en el sitio website2.fr
?
Cuando ejecute el script, el contenido de http://website2.fr/file.xml
será idéntico al contenido de http://website1.fr/file.xml
recuperado a través de HTTP.