2015-03-22 5 views
4

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

Это то, что у меня есть:

// set up basic connection 
$conn_id = ftp_connect('HOST_ADDRESS'); 

// login with username and password 
$login_result = ftp_login($conn_id, 'USERNAME', 'PASSWORD'); 

if (!$login_result) 
{ 
    exit(); 
} 

// get contents of the current directory 
$contents = ftp_nlist($conn_id, "DirectoryName"); 

$files = []; 

foreach ($contents AS $content) 
{ 
    $ignoreArray = ['.','..']; 
    if (! in_array($content , $ignoreArray)) 
    { 
     $files[] = $content; 
    } 
} 

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

Я не знаю, как это сделать, я бы себе представить, что должен был бы быть что-то вроде этого, хотя:

foreach ($files AS $file) 
{ 
    $handle = fopen($filename, "r"); 
    $contents = fread($conn_id, filesize($file)); 
    $content[$file] = $contents; 
} 

выше идея приходит отсюда:
PHP: How do I read a .txt file from FTP server into a variable?

Хотя я не Не нравится идея подключиться каждый раз, чтобы захватить содержимое файла, предпочла бы сделать это в исходном экземпляре.

ответ

1

Чтобы избежать необходимости подключения/вход для каждого файла, используйте ftp_get и повторно использовать идентификатор соединения ($conn_id):

foreach ($files as $file) 
{ 
    // Full path to a remote file 
    $remote_path = "DirectoryName/$file"; 
    // Path to a temporary local copy of the remote file 
    $temp_path = tempnam(sys_get_temp_dir(), "ftp"); 
    // Temporarily download the file 
    ftp_get($conn_id, $temp_path, $remote_path, FTP_BINARY); 
    // Read the contents of temporary copy 
    $contents = file_get_contents($temp_path); 
    $content[$file] = $contents; 
    // Discard the temporary copy 
    unlink($temp_path); 
} 

(Вы должны добавить проверку некоторые ошибки.)

+0

нормально - Спасибо. Поэтому, если бы я хотел сохранить файл, я бы просто не использовал: unlink? – HappyCoder

+0

Конечно, но в этом случае вы, вероятно, захотите использовать более значимый файл и путь, например '$ temp_path ="/path /".$ file'. И имя переменной '$ temp_path' тоже сбивает с толку. –

+0

Я получил это для работы, если вы обновите свой ответ, чтобы переключить удаленный путь и временный путь FTP-получения, а также добавьте требование «mode», после чего я приму ответ. tx для справки. – HappyCoder