首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:从ftp-server下载任何文件到硬盘?

PHP:从ftp-server下载任何文件到硬盘?
EN

Stack Overflow用户
提问于 2010-07-19 12:59:37
回答 2查看 14.7K关注 0票数 0

我真的真的需要你的帮助。我正在成功地建立到我的ftp服务器的连接。然而,我不知道如何从我的服务器下载一个动态文件。我想这也会对很多人有帮助,因为我在网上找不到任何教程或解释。

我只是在我的ftp上列出我所有的文件。如果我点击一个,我调用download.php,它会再次连接到服务器,并将文件下载到我的硬盘上。我能够自动提示一个下载窗口,一个文件被下载到我的硬盘上。然而,只有一个损坏的文件,其中没有设置头部。

代码语言:javascript
复制
/* path to files on ftp server … e.g. /folder/folder/name_of_file.jpg */
$p_arr = explode("/", $path);
/* the file name … e.g name_of_file.jpg */
$file = end($p_arr);

//$finfo = finfo_open(FILEINFO_MIME_TYPE); //returns a fatal error - function not found 
//$mimetype = finfo_file($finfo, $file);
//finfo_close($finfo);

//filetype($file)

/* creating a temporyry file to save to */
$tempFile = tempnam("/tmp", "FOO");

if(ftp_get($conn_id, $tempFile, $file, FTP_BINARY)){ 
    /*header Content-type: must be dynamic*/
    //header('Content-type:' . $mimetype);

    /*header to auto_prompt download window*/
    header('Content-Disposition: attachment; filename="'. $file .'"');
    readfile($tempFile);
} else { 
    echo "There was a problem <br>";
    echo $file . "<br>"; //e.g. image.jpg
}

/* deleting the file after the process */
//unlink($tempFile);

1.)我不明白为什么ftp_get返回false。连接设置完成,文件存在于正确的目录中。2.)我不知道如何在服务器上找到文件的mimetype类型,并将下载的文件提供给它,这样它就不会损坏。

请帮帮我,我真的卡住了。提前谢谢你

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-19 13:09:06

尝试先将其保存在本地,然后再将其推送回浏览器。

使用该代码将文件保存到本地。

代码语言:javascript
复制
<?php
                // define some variables
        $folder_path = "YOUR FOLDER PATH";
        $local_file = "LOCAL FILE PATH";
        $server_file = "SERVER FILE PATH";

        //-- Connection Settings
        $ftp_server = "IP ADDRESS"; // Address of FTP server.
        $ftp_user_name = "USERNAME"; // Username
        $ftp_user_pass = "PASSWORD"; // Password
        #$destination_file = "FILEPATH";

        // set up basic connection
        $conn_id = ftp_connect($ftp_server);

        // login with username and password
        $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

        // try to download $server_file and save to $local_file
        if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
            echo "Successfully written to $local_file\n";
        } else {
            echo "There was a problem\n";
        }

        // close the connection
        ftp_close($conn_id);
?>

我还发现了这个,也许它能帮到你

我的FTP服务器总是响应“(False)”,而不是给我一个目录列表。我必须在$login_result = ftp_login(...);行之后添加ftp_pasv($conn_id,true);。在那之后,它就工作得很好。

票数 4
EN

Stack Overflow用户

发布于 2013-01-31 19:57:34

这对我来说很有效:

代码语言:javascript
复制
$fname = "file.xxx";

$conn = ftp_connect(FTP_URL);
if(ftp_login($conn, FTP_USER, FTP_PWD))
{
    if(ftp_chdir($conn, FTP_DIR))
    {
        $th = fopen('php://temp', 'r+');
        if(ftp_fget($conn, $th, $fname, FTP_ASCII, 0))
        {
            rewind($th);
            $data = stream_get_contents($th);
        }
    }
}

header("Content-Disposition: attachment; filename=$fname");
echo $data;

这样,您不必先将文件保存在本地

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3278553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档