来自远程服务器的fopen(php)仅用于读取

来自远程服务器的fopen(php)仅用于读取,php,ftp,fopen,Php,Ftp,Fopen,我需要使用PHPfopen()从远程服务器打开一个文本文件,并在其中写入一些信息 allow\u url\u fopen是ON(在我的php.ini中) 我可以读取这个远程文件,但不能在其中写入 代码: 显示: 一些文本 远程文件未打开 写入文件时我能做些什么?从 允许读取访问现有文件,并通过FTP创建新文件 您可以打开文件进行读取或写入,但不能同时打开两个文件如果ftp服务器上已存在远程文件,并且您试图打开该文件进行写入,但未指定上下文选项overwrite,则连接将失败。如果需要通过ft

我需要使用PHP
fopen()
从远程服务器打开一个文本文件,并在其中写入一些信息

allow\u url\u fopen
ON
(在我的
php.ini
中)

我可以读取这个远程文件,但不能在其中写入

代码:


显示: 一些文本 远程文件未打开

写入文件时我能做些什么?

允许读取访问现有文件,并通过FTP创建新文件

您可以打开文件进行读取或写入,但不能同时打开两个文件如果ftp服务器上已存在远程文件,并且您试图打开该文件进行写入,但未指定上下文选项overwrite,则连接将失败。如果需要通过ftp覆盖现有文件,请在上下文中指定覆盖选项,然后打开文件进行写入。或者,您可以使用FTP扩展名

另请注意:

注意:追加

文件可以通过ftp://URL包装追加

我不确定覆盖是否意味着截断。如果是这样,您可以下载、修改,然后上载和覆盖,或者查看

更多信息来自:

您只能使用此方法创建新文件;如果试图覆盖已存在的文件,则fopen()调用将失败

然后是一个注释:

注意:

从上面的示例中,您可能会想到可以使用此技术写入远程日志文件。不幸的是,这不起作用,因为如果远程文件已经存在,fopen()调用将失败。要这样做分布式日志记录,您应该查看syslog()

因此,您似乎可以创建一个文件或完全覆盖现有文件。我还没有看到append的示例。

不支持同时打开文件进行读写。因此,您不能使用
w+
模式(读写)。使用
w
模式(仅限写入)

此外,默认情况下,FTP URL包装器不允许覆盖现有文件,您需要使用
覆盖
启用它



虽然这将是非常低效的,因为您将打开整个FTP会话两次。一次用于阅读,一次用于写作。您最好在一个会话中使用FTP函数。

但这里(第二个示例)是使用FTP编写的fwrite…我不需要附加。只有创建一个文件并写入(w+)后,仍然有人在使用
ftp
协议?哇!
<?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';
}
?>
$context = stream_context_create(['ftp' => ['overwrite' => true]]);
$fh = fopen($filename, 'w', false, $context);