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 в соответствующих местах и посмотреть, если скрипт работает более плавно.
$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=да_ _ __ в конце.