通过FTP URL打开文件



我正试图使用PHP从FTP URL下载一个文件,它看起来像ftp://username:password@domain/file.zip。URL很好,因为我可以下载文件并将其粘贴到任何浏览器中。Fopen支持这种文件流,刚才在这里看到了:Fopen。这是我的代码:

[...]
$destination_folder = '../importmlsupload/';    
$url = "ftp://user:password@domain/file.zip";
$newfname = $destination_folder . basename($url);
$file = fopen($url, "rb");
if ($file) {
    $newf = fopen($newfname, "wb");
    while(!feof($file)) {
        $s = fread($file, 1024);
        fwrite($newf, $s, 1024 );
    }
}
if (!empty($file)) {
    fclose($file);
}
if (!empty($newf)) {
    fclose($newf);
}

问题是我下载了一个ampty文件。我做了一些验证,得到了以下结果:文件在服务器上成功创建,但while循环(!feof(…))在第一步之后结束。因此,它读取1024个字节并退出循环。换句话说,feof在第一个1024字节或读取之后返回true。

尝试使用HTTP URL成功导入,但FTP URL未成功

我做错什么了吗?

我没有尝试你的代码,但如果你有ftp的详细信息,你可以使用ftp函数。这可能不是我知道的合适答案。:)

嗨,埃尔文,很抱歉回答晚了!

我只是遇到了同样的问题,实际上我找到了两个答案。首先我尝试了file_get_contents。这是这样工作的:

$input = file_get_contents($url);
$writtenChars = file_put_contents($newfname, $input);

非常简单且有效,但我想只适用于ASCII,如果你有足够的内存,在写之前会读取整个文件。我喜欢你的缓冲区方法。所以我做了以下事情:

$source = fopen($url, 'r');
$destination = fopen($newfname, 'w+');
while($data = fread($source, 1024)) {
    fwrite($destination, $data);
}

这适用于我正在下载的XML文件。当您在fopen模式参数中执行'wb'时,您的二进制文件应该很好。

对不起,我不知道为什么你的feof不起作用。但正如您在我的代码中看到的,您无论如何都不需要它。

相关内容

  • 没有找到相关文章

最新更新