-3

Я слышал, что file_put_contents перезаписывает файл, если он существует? Это то, что я хочу, но это не работает. Что?

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

Ошибка :

Удаленный файл уже существует, и опция контекста перезаписи не указана

1 ответ1

1

Вы не можете писать в HTTP, используя file_put_contents() .

Из документации file_put_contents():

URL может использоваться как имя файла с этой функцией, если включены обертки fopen . Смотрите fopen() для более подробной информации о том, как указать имя файла. См. Поддерживаемые протоколы и оболочки для ссылок на информацию о возможностях, которые имеют различные оболочки, примечания об их использовании и информацию о любых предопределенных переменных, которые они могут предоставить.

И из описания PHP протокола HTTP (выделено мое):

Разрешает доступ только для чтения к файлам / ресурсам через HTTP 1.0, используя метод HTTP GET.

file_put_contents() записывает в файл, но не может делать это по HTTP, потому что оболочка может только читать HTTP, используя GET.


Вам нужен другой подход для достижения того, что вы хотите.

В корневом каталоге документа website2.fr вы можете написать сценарий, который записывает file.xml после извлечения файла из http://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://website2.fr/file.xml будет идентично содержимому http://website1.fr/file.xml полученному по HTTP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .