PHP FTP ftp_nlist не работает, возвращая логическое значение false - PullRequest
14 голосов
/ 22 ноября 2011

У меня небольшая проблема с этим кусочком кода. Скрипт подключается, но он не выдаст мне папки, расположенные в корне ... я что-то упустил?

    $ftp_server = "ftp.something.com";
    $ftp_user = "user";
    $ftp_pass = "pass";

    // set up a connection or die
    $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server"); 

    // try to login
    if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) 
    {
        echo "Connected as $ftp_user@$ftp_server\n";
    } 
    else 
    {
        echo "Couldn't connect as $ftp_user@$ftp_server\n";
    }

    $contents = ftp_nlist($conn_id, ".");
    var_dump($contents);

    ftp_close($conn_id);  

    die;

выводит

Connected as $ftp_user@$ftp_server;

и

boolean false

Почему не будут перечислены файлы?

Я мог бы решить это очень быстро с

  file_exists("ftp//user:pass@host.com") 

... но самая легкая часть - это не то, что я ищу, я бы ничего не выучил

Ответы [ 3 ]

48 голосов
/ 22 ноября 2011

ftp_nlist() возвращает false при возникновении ошибки.Я предполагаю, что вам нужно использовать пассивную передачу:

// after ftp_login(...)
ftp_pasv($conn_id, true);

Generell, я бы порекомендовал устранить эту проблему, используя инструмент CLI, например ftp, или GUI-клиент, такой как Filezilla.Журнал / вывод очень, очень полезен.

HTH

6 голосов
/ 06 ноября 2018

Не паникуйте. Его легко решить. После ftp_login() просто используйте код, указанный ниже.

ftp_set_option($ftp_conn, FTP_USEPASVADDRESS, false); // set ftp option
ftp_pasv($ftp_conn, true); //make connection to passive mode

Этот код решил мою проблему.

1 голос
/ 22 февраля 2013

Я бы также предложил подтвердить, кто и где вы, чтобы убедиться, что разрешения и фактические результаты, которые вы ожидаете, верны (небольшая проверка работоспособности время от времени полезна).

    echo shell_exec('whoami')." is who i am </br>";

ипосле того, как вы подключитесь как пользователь, тогда

    echo "Current directory is now: " . ftp_pwd($conn_id) . "</br>";

, если вы можете делать эти вещи из командной строки как этот пользователь и перечислять содержимое каталога, то вы должны быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...