Домой WordPress WordPress: Вопросы и ответы Как сделать так что бы изображения хранились на другом сервере?
5ответ(ов) в теме
Krystina
не в сети 2 года
На сайте с 06.11.2016
Участник
Тем 103
Сообщения 339
1
12:55

Здравствуйте! Мне нужно реализовать функционал, который позволяет хранить изображения или файлы загружаемые пользователями на другом хостинге(сервере). Процесс загрузки изображений проходит через стандартный загрузчик вордпресс. То есть нужно как то отловить событие загрузки изображения в загрузчике и с помощью ftp сохранять на другом сервере. При этом на сайте все должно правильно открываться, не смотря на то что изображения с другого сервера.
В интернете нашла такое:
Для того что бы изображения которые загружает загрузчик медиафайлов вордпресс сохранялись на другом сервере по FTP я использую следующий плагин.

Как его написать:

1. Создайте папку в каталоге «plugins» например «media-ftp-plugin»

2. Создайте .php файл назовите например «media-ftp-plugin.php»

3. Вставьте в него следующий код:

/*
 Plugin Name: Wp-ftp-media-library
 Plugin URI: http://onwp.ru/question/kak-sdelat-tak-chto-by-izobrazheniya-xranilis-na-drugom-servere
 Description: Let's you upload images to ftp-server and remove the upload on the local machine.
 Version: 0.1
 Author: TrubinE
 Author URI: http://onwp.ru
 */
/**
 * @version 0.1
 */
 function wpse_74180_upload_to_ftp($args) {
$upload_dir = wp_upload_dir();
 $upload_url = get_option('upload_url_path');
 $upload_yrm = get_option('uploads_use_yearmonth_folders');
/**
 * Change this to match your server
 * You only need to change the those with (*)
 * If marked with (-) its optional
 */
 $settings = array(
 'host' => 'home.newserver.ru', // * the ftp-server hostname
 'port' => 21, // * the ftp-server port (of type int)
 'user' => 'user', // * ftp-user
 'pass' => 'pass', // * ftp-password
 'cdn' => 'home.newserver.ru', // * This have to be a pointed domain or subdomain to the root of the uploads
 'path' => '/www/img', // - ftp-path, default is root (/). Change here and add the dir on the ftp-server,
 'base' => $upload_dir['basedir']   // Basedir on local
 );
/**
 * Change the upload url to the ftp-server
 */
 if (empty($upload_url)) {
 update_option('upload_url_path', esc_url($settings['cdn']));
 }
/**
 * If uploads is stored like /uploads/year/month
 * Remove and use only /uploads/
 */
 if ($upload_yrm) {
 update_option('uploads_use_yearmonth_folders', '');
 }
/**
 * Host-connection
 * Read about it here: http://php.net/manual/en/function.ftp-connect.php
 */
 $connection = ftp_connect($settings['host'], $settings['port']);
/**
 * Login to ftp
 * Read about it here: http://php.net/manual/en/function.ftp-login.php
 */
 $login = ftp_login($connection, $settings['user'], $settings['pass']);
/**
 * Check ftp-connection
 */
 if (!$connection || !$login) {
 die('Connection attempt failed, Check your settings');
 }
/**
 * Get all files in uploads - local
 * Remove hidden-files... mabye better solution
 * http://php.net/manual/en/function.scandir.php
 */
 $files = preg_grep('/^([^.])/', scandir($settings['base']));
// Cycle through all source files
 foreach ($files as $file) {
/**
 * If we ftp-upload successfully, mark it for deletion
 * http://php.net/manual/en/function.ftp-put.php
 */
 if (is_file($settings['base'] . '/' . $file)) {
 if (ftp_put($connection, $settings['path'] . "/" . $file, $settings['base'] . "/" . $file, FTP_BINARY)) {
 $delete[] = $file;
 }
 }
 }
// Delete all successfully-copied files
 foreach ($delete as $file) {
 if (is_file($settings['base'] . '/' . $file)) {
 unlink($settings['base'] . '/' . $file);
 }
 }
return $args;
 }
add_filter('wp_generate_attachment_metadata', 'wpse_74180_upload_to_ftp');
add_filter('pre_option_upload_url_path', 'wpse_77960_upload_url');
function wpse_77960_upload_url() {
 return 'http://newserver.ru/img';
 }
add_filter('wp_handle_upload_prefilter', 'custom_upload_filter');
function custom_upload_filter($file) {
function microtime_float() {
 list($usec, $sec) = explode(" ", microtime());
 return ((int) $usec + (int) $sec);
 }
$time = microtime_float();
 $file['name'] = $time . $file['name'];
 return $file;
 }</code>
4. Настроить под свои данные.
Вы должны найти код:
<code>$settings = array(
'host' => 'home.newserver.ru', // * the ftp-server hostname
'port' => 21, // * the ftp-server port (of type int)
'user' => 'user', // * ftp-user
'pass' => 'pass', // * ftp-password
'cdn' => 'home.newserver.ru', // * This have to be a pointed domain or subdomain to the root of the uploads
'path' => '/www/img', // - ftp-path, default is root (/). Change here and add the dir on the ftp-server,
'base' => $upload_dir['basedir']   // Basedir on local
);

И заменить данные на свои.
cdn — домен где будут храниться файлы
host — можно указать ip или домен подключения по фтп
path — путь(полный, от того момента как подключились) к папке где хранить изображения
port — порт подключения по ftp
user — имя пользователя для подключения по ftp
pass — пароль для подключения по ftp
base — можно не менять

5. Заменить адрес хранения картинок на новый(новый адрес и путь для хранения картинок в вордпресс).
Для этого найдите функцию

function wpse_77960_upload_url() {
return 'http://newserver.ru/img';
}

Замените

Вы не можете просматривать опубликованные ссылки

— на новый, где у вас будут картинки.

Но почему-то не работает. Картинки не отображаются, а файлы не загружаются. То есть, показывает, что закачал, но на сервере папка пуста.
Если отключить функцию "Помещать загруженные мной файлы в папки по месяцу и году" то при загрузки ошибки не выдает, просто отображается изображение «битой» картинки.

Может есть кто работал или работает с этим плагином? Что нужно доработать? За любую помощь буду очень благодарна!

Редакции сообщения
29.01.2020 12:56KrystinaПричина: не указано
29.01.2020 12:56KrystinaПричина: не указано
0
Вова (Otshelnik-Fm)
не в сети 58 минут
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
2
13:28

Здравствуйте.

Кто-то написал код - а вы просите поддержку по нему тут. Почему просто не обратиться туда где вы его взяли?

0
Krystina
не в сети 2 года
На сайте с 06.11.2016
Участник
Тем 103
Сообщения 339
3
13:37

Поддержку вас лично не прошу!!! На форуме спрашиваю по теме...

Может есть люди грамотные которые смогут помочь по человечески! Может кто сталкивался или будет интересно!

0
Вова (Otshelnik-Fm)
не в сети 58 минут
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
4
13:49

Я лишь намекнул - что первоисточник может вам помочь. Иногда люди не догадываются написать автору напрямую.
Это из моего опыта. Рад был вам помочь

0
Krystina
не в сети 2 года
На сайте с 06.11.2016
Участник
Тем 103
Сообщения 339
5
13:59

Дружаев Владимир (Otshelnik-Fm) сказал(а)
Я лишь намекнул - что первоисточник может вам помочь. Иногда люди не догадываются написать автору напрямую.
Это из моего опыта. Рад был вам помочь

Сам автор не знает в чем может быть причина.... должно работать))) вот Ответ!!!
Печально, но, к сожалению, данный плагин не поддерживается и что же делать..... Вот я и написала на форум так как знаю что здесь есть специалисты.

Владимир, спасибо вам за ответ!

0
Вы не имеете права на публикацию сообщений в этой теме