Ouvi dizer que file_put_contents substitui o arquivo, se ele existir? É isso que eu quero, mas não funciona. Fazer o que?
$contentsAnnonces = file_get_contents("http://website1.fr/file.xml");
$filename = "http://website2.fr/file.xml";
file_put_contents($filename, $contentsAnnonces);
Erro:
O arquivo remoto já existe e a opção de contexto de substituição não foi especificada
Responder1
Você não pode gravar em HTTP usando file_put_contents()
.
Defile_put_contents()
documentação:
Uma URL pode ser usada como nome de arquivo com esta função se oinvólucros fopenforam habilitados. Verfopen()para obter mais detalhes sobre como especificar o nome do arquivo. Veja oProtocolos e wrappers suportadospara obter links para informações sobre quais habilidades os vários wrappers possuem, notas sobre seu uso e informações sobre quaisquer variáveis predefinidas que eles possam fornecer.
E deDescrição do PHP do protocolo HTTP(ênfase minha):
Permiteacesso somente leiturapara arquivos/recursos via HTTP 1.0, usando o método HTTP GET.
file_put_contents()
grava em um arquivo, mas não pode fazer isso por HTTP porque o wrapper só pode ler HTTP usando GET.
Você precisa de uma abordagem diferente para realizar o que deseja.
Na raiz do documento website2.fr
, você pode escrever um script que grava file.xml
depois de buscar o arquivo em http://website1.fr/file.xml
.
Exemplo:
<?php
$contentsAnnonces = file_get_contents("http://website1.fr/file.xml");
file_put_contents(ORIGINE_DU_DOCUMENT . "/file.xml", $contentsAnnonces);
… onde ORIGINE_DU_DOCUMENT
está o caminho para a raiz do documento no site website2.fr
.
Ao executar o script, o conteúdo de http://website2.fr/file.xml
seria idêntico ao conteúdo de http://website1.fr/file.xml
recuperado por HTTP.