PHP ftp put предупреждение предупреждение: ftp put () [функция.ftp-put]: введите значение I. in

когда я пытаюсь загрузить файлы с помощью функции FTP_PUT PHP, ранее это было ошибкой:

Warning: ftp_put() [function.ftp-put]: No data connection

теперь я попытался включить пассивный режим:

ftp_pasv($conn_id, true);

выходит ошибка:

Warning: ftp_put() [function.ftp-put]: Type set to I. in

ftp_login выполняется правильно, и он говорит успешно.

теперь он дает новое предупреждение: предупреждение:ftp_put() [function.ftp-put]: abc.txt: Cannot open or remove a file containing a running program.

любые идеи, почему файл не переводом ?

спасибо !

здесь является ли мой фрагмент кода:

    $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");

    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass) or die("You do not have access to this ftp server!");

    if ((!$conn_id) || (!$login_result)) {
        // wont ever hit this, b/c of the die call on ftp_login
        echo "<span style='color:#FF0000'><h2>FTP connection has failed! <br />";
        echo "Attempted to connect to $ftp_server for user $ftp_user_name</h2></span>";
        exit;
    } else {
        //echo "Connected to $ftp_server, for user $ftp_user_name <br />";
    }

    //turn passive mode on
    ftp_pasv($conn_id, true);

    $upload = ftp_put($conn_id, $destination_file.$name, $filename, FTP_BINARY);

    if (!$upload) {
        echo "<span style='color:#FF0000'><h2>FTP upload of $filename has failed!</h2></span> <br />";
    } else {
        echo 'Uploaded';    
    }

 ftp_close($conn_id);

6 ответов


последняя ошибка, которую вы видите, происходит, когда демон FTP застрял с загруженным файлом открытым и ждет вас, чтобы написать в него.

всякий раз, когда вы успешно открываете соединение через FTP-сервер, будьте готовы закрыть соединение со следующей функцией, когда процесс завершается или завершается из-за каких-либо ошибок.

ftp_close($conn_id);

возможно, ваш скрипт оставляет свои соединения открытыми, и FTP-сервер запутывается в этом. Попробуйте добавить ftp_close в соответствующих местах и посмотреть, если скрипт работает более плавно.


http://php.net/ftp_pasv

$resource = ftp_connect('ftp.example.com');
ftp_login($resource, 'username', 'password');

# set this to true
ftp_pasv($resource, true);

ftp_get(...);
ftp_put(...);

Я получал такое же (не очень описательное) сообщение об ошибке E_WARNING ftp_get(): Type set to I..

я узнал, что это потому, что сервер под управлением PHP не имеет видимого публичного IP (это виртуальный сервер на моей рабочей станции).

решение с помощью пассивный режим. Настройка по умолчанию (активный режим) не имела проблем на live server, потому что live server имеет видимый общедоступный IP.


Я пробовал использовать ftp-функции в PHP и обнаружил, что их намного проще использовать file_put_contents() следующим образом:

$remote_file = "ftp://username:password@host.com/path/to/file.txt";
file_put_contents($remote_file, $file_contents);

вы все еще можете проверить, был ли он успешным и все, что хороший материал, конечно, тоже.


ваша настройка ftp выглядит нормально, попробуйте поместить имя файла $destination_file.$name в одной переменной, дамп переменной и убедитесь, что этот файл существует с абсолютным путем, если он не находится в той же папке, что и ваш скрипт. Это единственная деталь, которую я увидел с первого взгляда, которая может задушить вашу загрузку.

убедитесь, что ваш файл не открывается в Редакторе! И если файл .txt вы можете использовать FTP_ASCII, хотя пребывание в двоичном файле не должно вызывать проблема.

удачи!


Я нашел ее решение, как показано ниже:

Я только что говорил с поддержкой сервера EUKHOST

главным моментом в этом было то, что человек поддержки теперь открыл passive port диапазон для FTP на сервере, и он сказал нам попробовать загрузку FTP сейчас. Если бы вы могли попробовать его с некоторым тестовым файлом, и он прошел успешно..


добавить следующие строки в конце

открыть / etc / vsftpd.conf и добавить pasv_promiscuous=да_ _ __ в конце.