日前正在用php做一个ftp的断点续传的东东,我使用ftp_raw()函数来想服务器发送ftp命令,但是命令发送过去后,却没有下载。不知什么原因,望高手指点。我按照以下流程制作的。user xxxx
pass xxxx
cwd workpath
pasv/port
rest 该指令后面必须立即跟随retr或者stor,否则为非法或者无效指令
retr 代码如下 $ftp_ary = array(
'host'=>"192.168.1.9",
'port'=>"21",
'username'=>"aaaa",
'userpass'=>"123456",
'filepath'=>"/"
 );
 $fp = ftp_connect($ftp_ary['host']);
 $res = ftp_raw($fp, "USER ".$ftp_ary['username']);
 echo "USER ".$res[0]."\r\n";
 $res = ftp_raw($fp, "PASS ".$ftp_ary['userpass']);
 echo "PASS ".$res[0]."\r\n";
 $res = ftp_raw($fp, "PASV");
 echo "PASV ".$res[0]."\r\n"; @ $size = filesize("Bam20090608.dat");
 $res = ftp_raw($fp, "REST ".$size);
 echo "REST ".$size." ".$res[0]."\r\n";
 $res = ftp_raw($fp, "RETR /Bam20090608.dat");
 echo "RETR Bam20090608.dat ".$res[0]."\r\n";

解决方案 »

  1.   

    USER aaaa是否有权限连接呢?
      

  2.   

    有,ftp用户名和密码都是定好的,而且我通过cmd测试了。也通过linux终端工具测试了,可以登录下载。
    但是通过php代码发送ftp命令就不行了。返回结果如下:
    -----------------------------------------
    USER 331 User name okay, need password.
    PASS 230 User logged in, proceed.
    PASV 227 Entering Passive Mode (192,168,1,9,7,172)
    REST 10297965 350 Restarting at 10,297,965. Send STORE or RETRIEVE.
    RETR Bam20090608.dat 150 Opening BINARY mode data connection for Bam20090608.dat (129581568 Bytes).
    -----------------------------------------
    以上为运行后的信息。但是文件却没下载下来。不知是何原因。
      

  3.   

    ftp_get和ftp_fget都支持续传阿,为什么非要自己写命令呢
      

  4.   

    不是吧?ftp_get() 能续传?怎么做?
      

  5.   

    bool ftp_get ( resource $ftp_stream , string $local_file , string $remote_file , int $mode [, int $resumepos= 0 ] )
    就是这个$resumepos,自4.3.0开始支持续传了
      

  6.   

    你不调用工具的话,单单发送命令,USER也没有断点续传的体验吧?
      

  7.   

    ftp_get的缺省参数是可以支持断点,但前提是你还得计算起点,即已下载的文件长度
      

  8.   

    ftp_get()确实支持断点。问题已经解决谢谢各位。现在结贴。