为什么我看到了php ftp函数和其他客户端中的ftp函数之间的这些差异?

为什么我看到了php ftp函数和其他客户端中的ftp函数之间的这些差异?,php,drupal,ftp,watchdog,Php,Drupal,Ftp,Watchdog,我目前在mac上,当我使用命令行客户端连接到ftp服务器时,它可以工作,我看到两个文件夹Arkiv和Saxo,如果我进入浏览器,我会看到同样的情况 在drupal中,我有一个cron钩子,在这里我使用php ftp函数。当然,我使用的用户名和密码与其他两个案例相同 下面是一个代码示例 if (@ftp_login($conn_id, $ftp_user_name, $ftp_user_pass)) { $listing = ftp_rawlist($conn_i

我目前在mac上,当我使用命令行客户端连接到ftp服务器时,它可以工作,我看到两个文件夹Arkiv和Saxo,如果我进入浏览器,我会看到同样的情况

在drupal中,我有一个cron钩子,在这里我使用php ftp函数。当然,我使用的用户名和密码与其他两个案例相同 下面是一个代码示例

       if (@ftp_login($conn_id, $ftp_user_name, $ftp_user_pass)) {

         $listing = ftp_rawlist($conn_id, ".");
         watchdog('ftp root current directory', ftp_pwd($conn_id),array(), WATCHDOG_WARNING);
         watchdog('ftp root directory listing', print_r($listing,true),array(), WATCHDOG_WARNING);
         watchdog('ftp root try to change directory',$dir,array(), WATCHDOG_WARNING);

         $filecount = 0;
         if (ftp_chdir($conn_id, $dir)) {
            $contents = ftp_rawlist($conn_id, ".");
            watchdog('inside contents', print_r($contents,true), array(), WATCHDOG_WARNING);
            watchdog('inside contents and current folder', ftp_pwd($conn_id), array(), WATCHDOG_WARNING);
...
}}
变量$dir被设置为我希望看到的其中一个文件夹的名称——在本例中为“Arkiv”,当我在命令行或浏览器中查看时,该文件夹中包含数百个文件

我从这个过程中收到的消息是:

inside contents and current folder  09/09/2014 - 15:19  /Arkiv  Anonymous (not verified)    
inside contents 09/09/2014 - 15:19      Anonymous (not verified)    

ftp root try to change directory    09/09/2014 - 15:18  Arkiv   Anonymous (not verified)    
ftp root directory listing  09/09/2014 - 15:18      Anonymous (not verified)    
ftp root current directory  09/09/2014 - 15:18  /   Anonymous (not verified)
当我试图列出目录内容时,似乎无法取回任何内容。 我尝试了rawlist和nlist,但都没有返回任何内容,无论是在根目录中,我应该有两个子目录Arkiv和Saxo,还是在子目录本身中,有几百个文件(通过命令行和浏览器确认)

此外,如果$listing的输出=ftp_rawlist($conn_id,“.”);是空的,我怎么会这样呢

if (ftp_chdir($conn_id, $dir)) { .. }
它允许我通过和

ftp_pwd($conn_id)

告诉我我在'/Arkiv'文件夹中

这种差异是由于在一个具有NAT和各种防火墙的虚拟机内部造成的,在这种情况下,应该使用ftp_pasv,不幸的是,我在登录之前调用了它,而文档指定应该在登录之后调用它