file_put_contents não é sobrescrever / substituir opção de contexto não especificada

file_put_contents não é sobrescrever / substituir opção de contexto não especificada

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.xmldepois 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_DOCUMENTestá o caminho para a raiz do documento no site website2.fr.

Ao executar o script, o conteúdo de http://website2.fr/file.xmlseria idêntico ao conteúdo de http://website1.fr/file.xmlrecuperado por HTTP.

informação relacionada