fopen (php) с удаленного сервера работает только для чтения - PullRequest
3 голосов
/ 14 февраля 2020

Мне нужно открыть текстовый файл с удаленного сервера и записать в него некоторую информацию, используя PHP fopen().

allow_url_fopen - это ON (по моему php.ini) .

Я могу прочитать этот удаленный файл, но не могу в него записать.

Код:

<?php
$data = 'some text';
$filename = 'ftp://admin:password@192.168.254.1/web/domain.com/public_html/test2.txt';
$fh = fopen($filename, 'r'); 
echo fread($fh, filesize($filename));
fclose($fh);

$fh = fopen($filename, 'w+'); 
if ($fh) {
  echo 'remote file is opened, writing data';
  fwrite($fh, $data);
  fclose($fh);
} else {
  echo 'remote file not opened';
}
?>

Показывает: некоторый текстовый удаленный файл не открыт

Что я могу сделать в записи в файл?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

PHP Оболочка URL-адреса FTP не поддерживает одновременное открытие файла для чтения и записи. Таким образом, вы не можете использовать режим w+ (чтение и запись). Используйте режим w (только запись).

Кроме того, обертка URL-адреса FTP по умолчанию не позволяет перезаписывать существующий файл, необходимо включить его, используя overwrite Параметр контекста FTP .

$context = stream_context_create(['ftp' => ['overwrite' => true]]);
$fh = fopen($filename, 'w', false, $context); 

Хотя это будет совсем неэффективно, так как вы будете дважды открывать весь сеанс FTP. Один раз для чтения и один раз для записи. Вам лучше использовать функции FTP ftp_get и ftp_put за один сеанс.

0 голосов
/ 14 февраля 2020

С PHP: ftp: //

Разрешает чтение доступ к существующим файлам и создание новых файлов через FTP.

Вы можете открывать файлы для чтения или записи, но не для обоих одновременно. Если удаленный файл уже существует на FTP-сервере, и вы пытаетесь открыть его для записи, но не указали перезаписать параметр контекста, соединение не будет установлено . Если вам нужно перезаписать существующие файлы через ftp, задайте параметр перезаписи в контексте и откройте файл для записи. Кроме того, вы можете использовать расширение FTP.

Также примечание:

Примечание : добавление

Файлы могут быть добавлены через ftp: // упаковщик URL.

Я не уверен, что перезапись означает усечение или нет. Если это так, вы можете загрузить, изменить, а затем загрузить и перезаписать или просмотреть PHP: функции FTP .

Больше от PHP: использование удаленных файлов :

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

И затем примечание:

Примечание:

Из приведенного выше примера вы можете понять, что вы можете использовать эту технику для записи в удаленный файл журнала. К сожалению, это не сработает, потому что вызов fopen () не удастся, если удаленный файл уже существует. Чтобы сделать распределенное ведение журнала подобным образом, вы должны взглянуть на syslog ().

Таким образом, вы можете создать файл или полностью перезаписать существующий. Я не видел пример для добавления.

...