通过PHP的FTP连接始终要求用户名&;密码

通过PHP的FTP连接始终要求用户名&;密码,php,ftp,Php,Ftp,所以我有一个FTP服务器,里面有大量的大文件(大部分是卫星图像数据)。我正在用PHP构建一个系统,为用户下载文件提供服务。系统可以在FTP服务器上显示文件列表,以便下载文件。通常,列表不是来自FTP服务器,我将列表存储在数据库中 对于FTP连接,我已将详细信息(FTP用户、FTP密码和FTP服务器)存储在配置文件中。所以在这里,我不希望用户输入任何内容,只需单击下载按钮,然后获取文件 我的系统的流程是: 检查请求的数据是否可用 如果可用,则使用FTP\u connect 如果连接成功,则使用FT

所以我有一个FTP服务器,里面有大量的大文件(大部分是卫星图像数据)。我正在用PHP构建一个系统,为用户下载文件提供服务。系统可以在FTP服务器上显示文件列表,以便下载文件。通常,列表不是来自FTP服务器,我将列表存储在数据库中

对于FTP连接,我已将详细信息(FTP用户、FTP密码和FTP服务器)存储在配置文件中。所以在这里,我不希望用户输入任何内容,只需单击下载按钮,然后获取文件

我的系统的流程是:

  • 检查请求的数据是否可用
  • 如果可用,则使用
    FTP\u connect
  • 如果连接成功,则使用
    FTP\u登录登录到FTP
  • 在数据库的日志表中插入新记录
  • 使用PHP头将用户重定向到请求的文件('位置:')
  • 关闭FTP连接
  • 它真的管用

    但它总是要求每个用户下载请求的FTP用户名和密码

    那怎么了?还是有更好的方法

    编辑: 下面是download.php中的代码:

        <?php
        include "config.php";
        include "query_user.php";
        include "function.php"; 
    
        $data_id = $_GET['data_id'];
    
        $user_id = $query_user['user_id'];
    
        $query = mysqli_query($link, "SELECT count(*) as jumlah, data_url FROM lord_data WHERE data_id='".$data_id."'");
        $query_data = mysqli_fetch_array($query);
    
        if($query_data['jumlah'] > 0){
            $name= $query_data['data_url']; 
            set_time_limit(20);
            $conn_id = ftp_connect($ftp_server, 21, 10);
            if($conn_id){
                $conn_login = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
                $query = mysqli_query($link, "INSERT INTO lord_download_log (user_id, data_id) VALUES ('$user_id', '$data_id')");
                header('Location: ftp://'.$ftp_server.'/foldername/'.$name.'');
                // close the connection
                ftp_close($conn_id);
            }else{
                $ftp_server = "172.xx.xx.xx";
                $change_ip = ftp_connect($ftp_server, 21, 10);
                if($change_ip){
                    $conn_login = ftp_login($change_ip, $ftp_user_name,        $ftp_user_pass);
                    $query = mysqli_query($link, "INSERT INTO lord_download_log (user_id, data_id) VALUES ('$user_id', '$data_id')");
                    header('Location: ftp://'.$ftp_server.'/foldername/'.$name.'');
                    // close the connection
                    ftp_close($change_ip);
                }else{  
                    echo "Couldn't establish a connection.";
                }
            }
    
        }else{
            echo "<script>alert('Download failed! Data is not available');document.location='index.php?p=data_download';</script>";
        } 
        ?>
    

    您需要使用
    ftp\u get
    方法下载文件,而不是将用户重定向到文件位置

    使用以下代码从FTP获取文件并强制用户下载:

    $server_file = "/path/to/server/file";
    $conn_id = ftp_connect($ftp_server);
    $local_file = tempnam(sys_get_temp_dir(), 'download_');
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
      $quoted = sprintf('"%s"', addcslashes(basename($local_file), '"\\'));
      $size   = filesize($local_file);
    
      header('Content-Description: File Transfer');
      header('Content-Type: application/octet-stream');
      header('Content-Disposition: attachment; filename=' . $quoted); 
      header('Content-Transfer-Encoding: binary');
      header('Connection: Keep-Alive');
      header('Expires: 0');
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
      header('Pragma: public');
      header('Content-Length: ' . $size);
    }
    ftp_close($conn_id);
    

    @迪利普·库马尔,现在可以了

    我更改代码如下:

    <?php
    include 'config.php';
    // connect and login to FTP server
    $conn_id = ftp_connect($ftp_server, 21, 10);
    $login = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    // turn passive mode on
    ftp_pasv($conn_id, true);
    
    if($login){
        $chdir = ftp_chdir($conn_id, "lisatstor01");
        $local_file = "local.zip";
        $server_file = "LA3_2016-10-19_Lumajang.zip";
    
        // download server file
        if (ftp_nb_get($conn_id, $local_file, $server_file, FTP_BINARY))
          {
              $quoted = sprintf('"%s"', addcslashes(basename($local_file), '"\\'));
              $size   = filesize($local_file);
    
              header('Content-Description: File Transfer');
              header('Content-Type: application/octet-stream');
              header('Content-Disposition: attachment; filename=' . $quoted); 
              header('Content-Transfer-Encoding: binary');
              header('Connection: Keep-Alive');
              header('Expires: 0');
              header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
              header('Pragma: public');
              header('Content-Length: ' . $size);
    
            echo "Successfully written to $local_file.";
          }
        else
          {
          echo "Error downloading $server_file.";
        }
    }else{
        echo "login failed";
    }
    // close connection
    ftp_close($conn_id);
    ?>
    

    与问题分享您的代码。当您使用
    ftp\u login
    登录时,应使用
    ftp\u get
    方法下载文件我已编辑问题并粘贴代码我刚收到警告:
    警告:ftp\u get():ftp://172.xx.xx.xx/lisatstor01/LA3_2016-11-08_Muko.zip: 实际上没有这样的文件或目录
    ,http和ftp不在同一个目录中server@ArifKWijayanto您的路径不正确,请尝试仅使用路径
    '/lisatstor01/LA3_2016-11-08_Muko.zip'