Загрузка файлов на 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);

Данная публикация представляет собой перевод статьи «FTP Upload with PHP for Beginners» , подготовленной дружной командой проекта Интернет-технологии.ру

Меню