web-dev-qa-db-ja.com

ローカルアバターを表示できない

下記の更新を参照してください。svnを使って3.7.1にアップグレードしました。私はすべてが問題ないことを確認するために、まず私のローカルホストでこれを行いました。すべてがそうだったので、私はサーバー上でそれをやり始めました。しかし、サーバー上では、ユーザーのアバターは表示されず、代わりに誰もがGravatarの謎の男を手に入れています。

これが私のfunctions.phpにあるコードです:

<?php switch ( $comment->comment_type ) :
case '' :
?>
<p <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
<div id="comment-<?php comment_ID(); ?>">
<?php echo get_avatar( $comment, 40 ); ?>

上記のローカルホスト上の生成されたページのソースを見ると、次のコードが表示されます。

<img src="http://localhost/[path]/wp-content/uploads/avatars/[a number]/[imagename.jpg]"

サーバーでソースを表示すると、同じユーザーに対して次のコードが表示されます。

<img src="http://gravatar.com/avatar/[alphanumeric]=http://[mywebsite.com]/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg[code]"

私はどこかでミスをしているに違いないが、私の人生のために私はそれを理解することができない。私が思いつくことができる唯一の説明はGravatarがlocalhostからの要求を受け付けていないということです、そしてそれはそれが私がそれを私のlocalhostで望みどおりに働いている理由です。

それで、私は彼らの地元のアバター(彼らが彼ら自身をアップロードしたもの)を表示させるためにしなければならないのですか?私はBuddyPressプラグインを(localhostとserverの両方で)使っていることも付け加えておくべきです。

それ以外に、サーバー上のファイルと開発用マシン上のファイルを比較するために使用する手法はありますか? vimdiffに似たものはありますか?

更新:cp -rを使ってlocalhostディレクトリを別のディレクトリに再帰的にコピーしました。それからそのディレクトリをリモートサーバーと同期させて、サーバーのミラーにしました。それから私はdiff -NbBiwr /path/to/localhost /path/to/localhostCopyThatWasRsyncedを実行しました、そして.svnディレクトリの中のもののために保存された大きな違いは受けませんでした。コピーしたバージョンをブラウザで表示すると、ローカルのアバターが表示されます。これは実際にはまったく意味がなくなり始めています。私はまた、リモートサーバー上のものを反映するようにsqlデータベースを更新しました。ローカルアバターはlocalhostには表示されますがリモートサーバーには表示されません。

UPDATE 2:最後の更新以降に私が試みたことがすべてあります。

  1. wp-debugをtrueに切り替えます。注意の誤りはありません。
  2. ディレクトリ全体を削除し、新しいsvn coを行いました。
  3. BuddyPress以外の他のすべてのプラグインを非アクティブ化しました。
  4. デフォルトのBuddyPressテーマを使用しました。
  5. インストールされているバージョン3.6.1(私が使った最後の良いバージョン)。
  6. ディレクトリのアクセス権を確認および再確認しました。
  7. 私はアバターディレクトリを削除し、誰かがアバターをアップロードしようとすると、それはアバターディレクトリとユーザーIDサブディレクトリを作成しますが、画像はアップロードされません。サブディレクトリは空白のままです。これはフロントエンドUpload Failed! Error was: Unable to create directory wp-content/uploads/avatars/1407/avatars/1407. Is its parent directory writable by the server?で返されるエラーです。ご覧のとおり、何らかの理由でavatarsディレクトリとuseridサブディレクトリが重複しています。これはサーバーとローカルホストの両方で起こります。 Localhostはアバターを正しく表示しています。
  8. 下記のbirgireの提案にあふれていた。何もない。
1
thequerist

Uploadsフォルダに問題があることがわかりました。誰かが将来この問題を抱えているなら、これは何をすべきかです。

  1. BuddyPressを無効にします。
  2. chmod 777 uploads/
  3. BuddyPressを再インストールします
  4. chmod 775 uploads/

それだけでした。

1
thequerist

アイデアをデバッグする:

これが効果があるかどうかを確認することができます。

add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );

しかし、bp_core_fetch_avatarフィルタを通過するパラメータをチェックして、それらが正しいかどうかを確認する必要があります(未テスト)。

add_filter( 'bp_core_fetch_avatar', 'my_bp_core_fetch_avatar', 99, 9 );

function my_bp_core_fetch_avatar( $html, $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir )
{
    // debug:
    $args = array( 
                    'html'              => $html,
                    'params'            => join( ', ', $params ),
                    'item_id'           => $item_id,
                    'avatar_dir'        => $avatar_dir,
                    'css_id'            => $css_id,
                    'html_width'        => $html_width,
                    'html_height'       => $html_height,
                    'avatar_folder_url' => $avatar_folder_url,
                    'avatar_folder_dir' => $avatar_folder_dir,
            );

   $debug = date_i18n( 'c' );

   foreach( $args as $key => $value )
   {
       $debug .= sprintf( ' | %s: %s ', $key, $value );
   } 

    error_log( $debug . PHP_EOL , 3, '/path/to/my/debug.log' ); 

    return $html;
}

書き込み可能なdebug.logファイルへのパスを変更する必要があります。

ファイルには次のような行が含まれているはずです。

2013-11-12T12:01:16+00:00 | html: ???  | params: ???  | item_id:  ??? | avatar_dir: ??? | css_id: ??? | html_width: ??? | html_height: ??? | avatar_folder_url: ??? | avatar_folder_dir: ???

$paramsが配列であることを考慮して、上記のデバッグコードを更新しました。

いくつかの一般的なコメント:

/bp-core/bp-core-avatars.phpファイルを調べるのは面白いです。

アバター画像は、このフィルタによって上書きされているようです。

add_filter( 'get_avatar', 'bp_core_fetch_avatar_filter', 10, 5 );

bp_core_fetch_avatar_filter()コールバックの内側には、次の行があります。

 // Let BuddyPress handle the fetching of the avatar
$bp_avatar = bp_core_fetch_avatar( array( 'item_id' => $id, 'width' => $size, 'height' => $size, 'alt' => $alt ) );

そしてそれはその関数の中にあり、私は適用されたbp_core_fetch_avatarフィルタを見つけました。

それで、これらの関数はさらにデバッグする価値があると思いますか、それとも上記のbp_core_fetch_avatarフィルタを通してアバターを修正しようとすることができますか?

2
birgire