Поиск по сайту:
Душа — это бог, нашедший приют в теле человека (Сенека Старший).

WordPress запрашивает учетные данные для FTP. Что я должен делать?

11.12.2016
WordPress запрашивает учетные данные для FTP. Что я должен делать?

Возможно, если вы читаете эту статью, вы столкнулись с ситуацией, изображенной на рисунке сбоку.

Обычно я получаю такое уведомление от WordPress на машинах местного разработчика и на серверах, где используется ручная установка с использованием SSH. На самом деле я не помню, чтобы я когда-либо сталкивался с этим на общем хостинге, которые доступны через FTP.

Вы получаете это уведомление при попытки обновить WordPress или установить/обновить плагины или темы.

Не беспокойтесь, я не дам вам быстрое решение (или два).

  • Ну, видимо, вы можете попытаться предоставить учетные данные. Никогда не делал это, слишком параноидально для этого 🙂
  • В ролях магические заклинания, приведенному ниже.

Волшебное заклинание

  1. Поместите следующую строку в ваш wp-config.php:
    define('FS_METHOD', 'direct');
  2. Укажите свой сервер HTTP с доступом для записи ко всей папке WordPress, например, так (обновить его с вашими собственными конкретными значениями):
  3. cd _wordpress_dir_
    chown -R _username_:www-data . # задания группы в одним файле httpd использует, www-data для nginx в моем случае
    chmod -R g+w . # добавить доступ для записи в группу

     

На самом деле иногда вы можете выполнить только один из шагов (любой), но выполнение обоих дает 100% -ный результат.

Немного теории для заклинания

Если вы хотите знать, достаточно вам раскопать файл /wp-admin/includes/file.php ~ 900 строк вниз и найти эту функцию.

/**
 * Determines which method to use for reading, writing, modifying, or deleting
 * files on the filesystem.
 *
 * The priority of the transports are: Direct, SSH2, FTP PHP Extension, FTP Sockets
 * (Via Sockets class, or `fsockopen()`). Valid values for these are: 'direct', 'ssh2',
 * 'ftpext' or 'ftpsockets'.
 *
 * The return value can be overridden by defining the `FS_METHOD` constant in `wp-config.php`,
 * or filtering via {@see 'filesystem_method'}.
 *
 * @link https://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants
 *
 * Plugins may define a custom transport handler, See WP_Filesystem().
 *
 * @since 2.5.0
 *
 * @global callable $_wp_filesystem_direct_method
 *
 * @param array  $args                         Optional. Connection details. Default empty array.
 * @param string $context                      Optional. Full path to the directory that is tested
 *                                             for being writable. Default false.
 * @param bool   $allow_relaxed_file_ownership Optional. Whether to allow Group/World writable.
 *                                             Default false.
 * @return string The transport to use, see description for valid return values.
 */
function get_filesystem_method( $args = array(), $context = false, $allow_relaxed_file_ownership = false ) {
    $method = defined('FS_METHOD') ? FS_METHOD : false; // Please ensure that this is either 'direct', 'ssh2', 'ftpext' or 'ftpsockets'
 
    if ( ! $context ) {
        $context = WP_CONTENT_DIR;
    }
 
    // If the directory doesn't exist (wp-content/languages) then use the parent directory as we'll create it.
    if ( WP_LANG_DIR == $context && ! is_dir( $context ) ) {
        $context = dirname( $context );
    }
 
    $context = trailingslashit( $context );
 
    if ( ! $method ) {
 
        $temp_file_name = $context . 'temp-write-test-' . time();
        $temp_handle = @fopen($temp_file_name, 'w');
        if ( $temp_handle ) {
 
            // Attempt to determine the file owner of the WordPress files, and that of newly created files
            $wp_file_owner = $temp_file_owner = false;
            if ( function_exists('fileowner') ) {
                $wp_file_owner = @fileowner( __FILE__ );
                $temp_file_owner = @fileowner( $temp_file_name );
            }
 
            if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) {
                // WordPress is creating files as the same owner as the WordPress files,
                // this means it's safe to modify & create new files via PHP.
                $method = 'direct';
                $GLOBALS['_wp_filesystem_direct_method'] = 'file_owner';
            } elseif ( $allow_relaxed_file_ownership ) {
                // The $context directory is writable, and $allow_relaxed_file_ownership is set, this means we can modify files
                // safely in this directory. This mode doesn't create new files, only alter existing ones.
                $method = 'direct';
                $GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership';
            }
 
            @fclose($temp_handle);
            @unlink($temp_file_name);
        }
    }
 
    if ( ! $method && isset($args['connection_type']) && 'ssh' == $args['connection_type'] && extension_loaded('ssh2') && function_exists('stream_get_contents') ) $method = 'ssh2';
    if ( ! $method && extension_loaded('ftp') ) $method = 'ftpext';
    if ( ! $method && ( extension_loaded('sockets') || function_exists('fsockopen') ) ) $method = 'ftpsockets'; //Sockets: Socket extension; PHP Mode: FSockopen / fwrite / fread
 
    /**
     * Filter the filesystem method to use.
     *
     * @since 2.6.0
     *
     * @param string $method  Filesystem method to return.
     * @param array  $args    An array of connection details for the method.
     * @param string $context Full path to the directory that is tested for being writable.
     * @param bool   $allow_relaxed_file_ownership Whether to allow Group/World writable.
     */
    return apply_filters( 'filesystem_method', $method, $args, $context, $allow_relaxed_file_ownership );
}

 

Дело в том, чтобы определить, может ли WordPress изменить сам, он пытается создать временный файл. Чем он сравнивает временный идентификатор владельца файла с владельцем сценария WordPress. Если временный файл создается, то WP не нуждается в каких-либо полномочий. В противном случае WP пытается проверить, может ли файловая система быть доступна по FTP или SSH.

Чтобы ярлык этой сложной проверки вы можете установить константу FS_METHOD на значение “direct”. И обеспечить доступ на запись.

WordPress запрашивает учетные данные для FTP. Что я должен делать?

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
На этом уроке мы покажем вам, как легко создать FTP-сервер…

Спасибо!

Теперь редакторы в курсе.