file_put_contents は上書きされません / 上書きコンテキスト オプションが指定されていません

file_put_contents は上書きされません / 上書きコンテキスト オプションが指定されていません

file_put_contents は、ファイルが存在する場合はそれを上書きすると聞きました。それが私の希望ですが、動作しません。どうすればいいですか?

  $contentsAnnonces = file_get_contents("http://website1.fr/file.xml");
  $filename = "http://website2.fr/file.xml";
  file_put_contents($filename, $contentsAnnonces);

エラー :

リモート ファイルが既に存在し、上書きコンテキスト オプションが指定されていません

答え1

を使用して HTTP に書き込むことはできませんfile_put_contents()

からfile_put_contents()ドキュメンテーション:

この関数では、URLをファイル名として使用できます。fopen ラッパー有効になっています。fopen()ファイル名の指定方法の詳細については、サポートされているプロトコルとラッパーさまざまなラッパーの機能、使用方法に関するメモ、およびラッパーが提供する定義済み変数に関する情報へのリンク。

そしてPHP の HTTP プロトコルの説明(強調は筆者による):

許可する読み取り専用アクセスHTTP GET メソッドを使用して、HTTP 1.0 経由でファイル/リソースにアクセスします。

file_put_contents()ファイルに書き込みますが、ラッパーは GET を使用して HTTP を読み取ることしかできないため、HTTP 経由では書き込みできません。


望むことを達成するには、別のアプローチが必要です。

のドキュメント ルートから、からファイルを取得した後にwebsite2.frに書き込むスクリプトを作成できます。file.xmlhttp://website1.fr/file.xml

例:

<?php
$contentsAnnonces = file_get_contents("http://website1.fr/file.xml");
file_put_contents(ORIGINE_DU_DOCUMENT . "/file.xml", $contentsAnnonces);

ORIGINE_DU_DOCUMENTサイト上のドキュメント ルートへのパスはここにありますwebsite2.fr

スクリプトを実行すると、 の内容はHTTP 経由で取得されたhttp://website2.fr/file.xmlの内容と同一になりますhttp://website1.fr/file.xml

関連情報