какой из них более надежен в php ftp_connect vs file_put_content(ftp://)

в моем php restful API, работающем на динамометре heroku, так как мой API принимает пользователя для загрузки файлов, просмотр ($_FILES) -form post- мне нужно перенаправить загруженные файлы на мой ftp-сервер, чтобы сохранить их, поскольку у heroku нет хранилища.

я погуглил, чтобы найти лучший способ добиться этого, и нашел два метода

пример кода показывает оба метода

// common code:
$tmp_file_path = $_FILES['image']['tmp_name'];
$raw_filename = explode('.',$_FILES['image']['name']);
$extention = array_pop($raw_filename);
$filename = md5(implode('.',$raw_filename)).$extention;

// 1st: ftp_put_content;
$content = file_get_contents($tmp_file_path);
// additional stream is required as per http://php.net/manual/en/function.file-put-contents.php#96217
$stream = stream_context_create(['ftp' => ['overwrite' => true]]); 
$upload_success = file_put_content('ftp://username:[email protected]/'+$filename, $content, 0, $stream);

// 2nd: ftp_put
$conn_id = ftp_connect("ftp.simpleinformatics.com");
$login_result = ftp_login($conn_id, "username", "password");
ftp_pasv($conn_id, true); //for somereason my ftp serve requires this !
if (!$conn_id OR !$login_result) $upload_success = false;
$ftp_upload_success = ftp_put($conn_id,'/'.$filename, $tmp_file_path);

echo "file_put_content" . ($upload_success ? "upload success" : 'file upload failed');

echo "ftp_put" . ($ftp_upload_success ? "upload success" : 'file upload failed');

Я тестирую два метода на моем ftp-сервере, и оба работают, но я беспокоюсь о надежности, очень мало документации о деталях того, как работают два метода, поэтому я не уверен в паре вещей.

  1. Могу ли я использовать флаги file_put_content при размещении в ftp-файле? как FILE_APPEND или LOCK_EX ?
  2. что произойдет, если загрузить в папку, которая еще не существует?
  3. Какой метод более надежен и менее подвержен сбоям?
  4. хотя file_put_contents менее подробен, нам нужно сначала прочитать содержимое файла перед записью, может ли это вызвать проблемы с памятью?

person Zalaboza    schedule 08.11.2016    source источник
comment
Не читал большую часть поста, но, судя по заголовку, я бы сказал, что функции ftp_* более надежны, поскольку файловые оболочки для этих протоколов могут быть отключены.   -  person Jonnix    schedule 08.11.2016
comment
@JonStirling обрабатывает ли ftp_ * file_append / блокировку файлов / создание каталогов, если они не существуют?   -  person Zalaboza    schedule 08.11.2016


Ответы (1)


  1. Оболочка FTP URL поддерживает добавление, начиная с PHP 5:
    https://www.php.net/manual/en/wrappers.ftp.php#refsect1-wrappers.ftp-options
  2. Папка FTP не создается ни одним из способов. Ты должен позаботиться об этом сам.
  3. Слишком широкий.
  4. Не понятно.
person Martin Prikryl    schedule 08.11.2016