远程 FTP 服务器上的 fopen 函数

The fopen function on a remote FTP server

提问人:l0gin 提问时间:7/2/2023 最后编辑:l0gin 更新时间:7/2/2023 访问量:66

问:

我需要将表单数据保存到远程ftp服务器。

如果我设置了本地路径,一切正常。

$filename = "/home/fvaeytm/test/uploads/user_dirs/$user_login".date("Ymdhis").".txt";

当我尝试像这样更改文件的保存路径时:

$filename = "ftp://pi:[email protected]/home/pi/test/" . $user_login . date("Ymdhis") . ".txt";

...在远程 ftp 服务器上创建了一个文件,但没有内容。

在初始阶段(大约 30 秒),服务器上的文件也无法打开。

$filename = "/home/fvaeytm/test/uploads/user_dirs/$user_login".date("Ymdhis").".txt";

$myfile = fopen($filename, "w");

fwrite($myfile, $Name."\n");
fwrite($myfile, $Number."\n");
fclose($myfile);

echo "<div id='success_page'>";
echo "<p>OK</p>";
echo "</div>";
}

我不知道问题出在哪里。我尝试更改文件权限,但没有更改。仅创建一个具有正确名称的空文件,但不创建任何内容。

我在两个不同的FTP服务器上尝试过,在两个服务器上都遇到了同样的问题。

php 中的“allow_url_fopen”设置为“开”


更新:我尝试在第三台服务器上保存,这次是使用 OVH,结果发现这里一切正常。

当我尝试在家中的 ftp 服务器上时,文件已创建,但没有内容。

一个FTP服务器设置在OpenWrt上,另一个FTP服务器设置在Debian(Raspberry)上 - 两者都存在相同的问题。

我只想补充一点,重定向到家庭服务器的域停放在 Cloudflare 上,但 ssl 已关闭。通过外部 IP 连接到客户端,我可以轻松地在我的家庭 FTP 服务器上创建和保存文件,所以我不知道为什么脚本有问题。

php fopen fwrite

评论

0赞 Barmar 7/2/2023
@user1191247 他们不是完全按照答案说的去做吗?
2赞 Barmar 7/2/2023
如果未收到任何错误,则此代码应该有效。如果它能够创建文件,那么它就没有理由不写入内容。
0赞 Progman 7/2/2023
FTP服务器上写入的文件的大小是多少?它是否正好是 FTP 客户端中看到的 0 字节?

答:

0赞 l0gin 7/2/2023 #1

解决方案:除了用于 FTP 的标准端口 21 外,我还必须打开一系列端口:主路由器上的 40000-45000。

vsftpd.conf

pasv_min_port=40000
pasv_max_port=45000