Загрузка файлов на FTP-сервер с помощью PHP (для новичков)
Для того чтобы загрузить файл на FTP-сервер, вам нужна HTML форма, где можно разместить такие детали FTP-соединения, как те, что описаны ниже:
- server – сервер, на который вы хотите загрузить файл;
- username – имя пользователя, под которым происходит соединение с FTP сервером;
- password – пароль пользователя для доступа к FTP-серверу;
- path to server – путь к FTP-серверу, на который вы хотите загрузить свой файл;
- user file – файл, который вы собираетесь загрузить на FTP-сервер.
Подсказка: если вы хотите предложить пользователям вашего веб-сайта форму, куда они смогут загружать свои файлы, вы должны взять информацию о FTP-сервере и путь к нему из файла конфигурации. В этой статье мы демонстрируем подробный пример того, как загружать файлы через FTP, со всеми деталями.
У нас будет POST форма и атрибут enctype со значением multipart/form-data, потому что на нашей форме есть файл. Пользовательская форма, в которую нужно будет заносить информацию, выглядит так:
<form action="get_upload.php" method="POST" enctype="multipart/form-data">
<table align="center">
<tr>
<td align="right">Current server:</td>
<td><input size="50" type="text" name="server" value=""></td>
</tr>
<tr>
<td align="right">Username:</td>
<td><input size="50" type="text" name="user" value="">
</td>
</tr>
<tr>
<td align="right">Password:</td>
<td><input size="50" type="text" name="password" value="" ></td>
</tr>
<tr>
<td align="right">Path on the Server:</td>
<td><input size="50" type="text" name="pathserver" ></td>
</tr>
<tr>
<td align="right">Select File to Upload:</td>
<td><input name="userfile" type="file" size="50"></td>
</tr>
</table>
<table align="center">
<tr>
<td align="center"><input type="submit" name="submit"></td>
</tr>
</table>
</form>Когда пользователь отправляет форму, мы должны собрать всю информацию, которую пользователь занес в форму, и затем загрузить файл на FTP-сервер:
//имя файла, который нужно загрузить
$filep = $_FILES['userfile']['tmp_name'];
$ftp_server = $_POST['server'];
$ftp_user_name = $_POST['user'];
$ftp_user_pass = $_POST['password'];
$paths = $_POST['pathserver'];
//имя файла на сервере после того, как вы его загрузите
$name = $_FILES['userfile']['name'];Чтобы загрузить файл, мы должны, прежде всего, установить подключение к FTP-серверу с помощью функции ftp_connect, задав в качестве параметра адрес FTP-сервера. Функция возвращает идентификатор соединения:
$conn_id = ftp_connect($ftp_server);После соединения с сервером мы должны войти в учетную запись, используя функцию ftp_login, имеющую три входных параметра: идентификатор соединения, имя пользователя на FTP, пароль пользователя. Также нужно проверить, был ли вход осуществлен удачно:
// входим при помощи логина и пароля
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// проверяем подключение
if ((!$conn_id) || (!$login_result)) {
echo "FTP connection has failed!";
echo "Attempted to connect to $ftp_server for user: $ftp_user_name";
exit;
} else {
echo "Connected to $ftp_server, for user: $ftp_user_name";
}После авторизации мы можем загрузить файл на сервер, а затем проверить, был ли он загружен корректно:
// загружаем файл
$upload = ftp_put($conn_id, 'public_html/'.$paths.'/'.$name, $filep, FTP_BINARY);
// проверяем статус загрузки
if (!$upload) {
echo "Error: FTP upload has failed!";
} else {
echo "Good: Uploaded $name to $ftp_server";
}Для закрытия FTP-соединения мы используем функцию ftp_close, принимающую в качестве параметра идентификатор соединения:
ftp_close($conn_id);Для загрузки больших файлов необходимо установить для сервера ограничение по времени, чтобы не завершить скрипт, пока выполняется загрузка:
set_time_limit(300);
Комментарии
фильтрацию надо добавить иначе SQL-иньекция, а так норм
Спасибо, стало понятнее)