サポート » 使い方全般 » 画像のアップロードができない

  • 解決済 HalcionLunch

    (@halcionlunch)


    こんにちは。
    WordPress 3.0.1を使用しています。

    同じようなお悩みは多かったのですが、どうも起きている現象とは違うようなので、トピックを投稿しました。

    タイトル通り、記事から画像のアップロードができません。

    ●Flash アップローダー、ブラウザアップローダーでも同じ
    ●エラーメッセージは一切なし
    ●アップロードしても、破れた画像が表示されるのみ(つまり存在しない)表示されているファイルURLにアクセスしてもなにもなし
    ●ファイルURLは「http://xxx.jp/blog/files/2010/08/xxx.jpg」のようになっています。

    違うブログ(バージョンは2.x)でですが、今まで「wp-content」の「uploads」に保存されていたのですが、filesというフォルダの中に入ってしまっています。
    画像アップロード先を変更しようと思ったのですが、
    http://ja.forums.wordpress.org/topic/4713?replies=5 のようにアップロード先の指定ができない状態です。

    ちなみに「wp-content」に「uploads」フォルダは存在します。
    一応パーミッションも707、757、777と変更してみましたが解決なし(そもそも「files」が指定されていますし…

15件の返信を表示中 - 1 - 15件目 (全16件中)
  • モデレーター jim912

    (@jim912)

    HalcionLunchさん、こんにちは。

    ファイルのURLからすると、マルチサイトでの現象かと思います。
    マルチサイトの場合、メディアがアップロードされるディレクトリはwp-content/blogs.dir/n/files/yyyy/mm/となります。(nはブログのID、yyyyは年、mmは月)
    まずは、このディレクトリが存在するか、ファイルがアップロードされているかを確認してください。
    ※ ファイルURLと、ディレクトリの構造が異なるのは、リライトされているためです。

    ファイルが存在するのに、表示されないのであれば、マルチサイト化した時の.htaccessの編集がおかしい可能性があります。

    こんにちは、3.0新規インストールの画像ファイルの場所は、

    ネットワークで複数ブログを作る場合は、

    最初のブログは
    http://www.example.com/wp/wp-content/uploads/juice-150×150.jpg
    にアップロードされ、その場所で表示されます。
    2個目のブログは、
    http://www.example.com/wp/subdir/wp-content/files/juice-150×150.jpg
    が画像リンク先になりますが、実際の画像は、
    http://www.example.com/wp/subdir/wp-content/blogs.dir/2/files/juice-150×150.jpg
    (2はブログid)
    となっていると思われます。

    blog.dirの存在、パーミッションを調べてみるといいと思います。

    トピック投稿者 HalcionLunch

    (@halcionlunch)

    こんにちは。
    なるほど、いろいろ仕様が変わったのでしょうか?

    jim912さんのいうとおり、content/blogs.dir/n/files/yyyy/mm/の中に今までテストであげた画像が入っていました。

    blogs.dirのパーミッションを、707、757、777と試しましたが変化ありません。

    .htaccessが原因でしょうか…調べてみます。

    仕様が変わったのではなく、HalcionLunchさんがマルチサイトを使っているからです。それで、もう一つの質問もマルチサイトを使っているから故の仕様です。二つ以上のブログを管理する必要がなければ一般的なシングルインストールを行ってください。

    トピック投稿者 HalcionLunch

    (@halcionlunch)

    そうですか…
    3つほどのブログの管理が必要になってしまいます。
    ということは、解決しないということでしょうか?
    (個別にインストールすると解決でしょうが…)

    なるほど、いろいろ仕様が変わったのでしょうか?

    単体ワードプレスと、マルチユーザ版ワードプレスは、従来から別物とされてきました。

    ところで、blogs.dir が存在して、ファイルが保存されているのであれば、パーミッションは問題なさそうですね。

    で、そのアップロードされたファイルは、破損しているのでしょうか?
    httpでブラウザからアクセスできますか?

    私は、セーフモードのサーバを利用しているので、年月ディレクトリに分けていませんでしたので、確認できませんが、

    引用元
    1.MU2.9.2では、画像(メディア)の保存が自動的に、年月フォルダーに保存されていたのですが、
    WP3.0では、複数ブログに変更する前に、あらかじめ設定をしておかないと、年月フォルダーが作成されません。
    WP3.0複数ブログでも、画像の保存先を、年月フォルダーに分けるかどうかの設定があれば良いと思います。

    という発言が気になるところです。

    トピック投稿者 HalcionLunch

    (@halcionlunch)

    nobitaさん、ありがとうございます。
    「blogs.dir」のパーミッションは777にしています。

    ●フォルダの中の画像に直接アクセスしてみました
    http://xxx.jp/blog/wp-content/blogs.dir/1/files/2010/08/xxx.jpg
    →表示されませんね…「エラー: このリンクは無効です。」(chrome)と表示されます。

    アップロードするとやはり、このフォルダにきちんと存在しています。

    もちろん、アップロードしたときに表示されるURL
    http://xxx.jp/blog/files/2010/08/xxx.jpg
    にアクセスしてもなにもでてきません。

    FTPで1階層ずつ画像をアップロードしてアクセス、を続けてみました。

    http://xxx.jp/blog/wp-content/xxx.jpg →〇
    http://xxx.jp/blog/wp-content/blogs.dir/xxx.jpg →〇
    http://xxx.jp/blog/wp-content/blogs.dir/1/xxx.jpg →〇
    http://xxx.jp/blog/wp-content/blogs.dir/1/files/xxx.jpg →×

    そこでfilesのパーミッションが707だったので、757,777と変更してみましたが、
    files内の画像は表示されませんでした。
    「files」になにか原因があるのでしょうか?

    blogs.dirのパーミッションは755で試しましたか?

    FTPで1階層ずつ画像をアップロードしてアクセス、を続けてみました。

    chrome は、画像のチェックには、今のところ向かないと思っています。

    実在する画像の表示ができないということであれば、ヘッダが適切かどうかをチェックすることも必要かもしれません。

    ためしに、http://openlab.ring.gr.jp/k16/htmllint/htmllint.htmlにいって
    URL指定のときHTTPレスポンスヘッダを表示しますにチェックを入れて、URLには、画像のアドレスを入力してください。

    画像なので評価できませんならば、ヘッダは大丈夫ですが、マイナス10000点とかになったら、ヘッダがおかしいと判断できます。

    あとは、.htaccess等でのアクセス制限が、ついでにかかっているようなこともあるかもしれません。

    追伸:前回の回答で示したURLは、実際のアドレスで表示を確認済みです。

    トピック投稿者 HalcionLunch

    (@halcionlunch)

    >takuyaさん
    ありがとうございます。755は試していませんでした。が、ダメでした…

    >nobitaさん
    ありがとうございます。Firefoxでチェックすることにします。

    http://openlab.ring.gr.jp/k16/htmllint/htmllint.html
    で画像直接チェックしてみました。

    【結果】
    ●http://xxx.jp/blog/wp-content/xxx.jpg
    ●http://xxx.jp/blog/wp-content/blogs.dir/xxx.jpg
    ●http://xxx.jp/blog/wp-content/blogs.dir/1/xxx.jpg

    Another HTML-lint error!
    指定されたURL (http://xxx.jp/blog/wp-content/xxx.jpg) は HTML ではありません。(image/jpeg)

    ●http://xxx.jp/blog/wp-content/blogs.dir/1/files/xxx.jpg

    Another HTML-lint error!

    指定されたHTML (http://xxx.jp/blog/wp-content/blogs.dir/1/files/xxx.jpg) を取得することができませんでした。
    404 Not Found
    404 Not Found
    Connection: close
    Date: Fri, 06 Aug 2010 02:33:46 GMT
    Server: Apache
    Content-Length: 223
    Content-Type: text/html; charset=iso-8859-1
    Client-Date: Fri, 06 Aug 2010 02:33:46 GMT
    Client-Peer: xx.xxx.xx.xxx:xx
    Client-Response-Num: 1

    マイナス評価はありませんでした。
    .htaccessなのかな…

    モデレーター jim912

    (@jim912)

    HalcionLunchさん、こんにちは。

    画像がサーバ内にアップロードされているのであれば、表示過程での問題であり、パーミッションの問題ではありません。

    マルチサイトで追加した子ブログの保存される場所は、上述にようにwp-content/blogs.dir/n/files/yyyy/mm/となります。(nはブログのID、yyyyは年、mmは月)

    一方、画像のURLは、http://example.com/xxxx/files/yyyy/mm/xxx.jpといった形になります。

    URLと保存されるディレクトリが異なるのは、.htaccessでリライトされ、wp-includes/ms-files.phpを介して表示されるためです。

    マルチサイト利用時は、通常のシングルインストールとは.htaccessが異なり、画像の表示に関連する部分では、下記のような記述が追加されているはずです。(個々のインストール状況によって変わる可能性がありますので、正確には管理画面のツール > ネットワークにて確認してください。)

    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

    .htaccessに記述がなされているのであれば、リクエストがms-files.phpに渡っているはずです。ms-files.phpに

    echo 'done';
    exit;

    を挿入し、ファイルURLであるhttp://xxx.jp/blog/files/2010/08/xxx.jpgにアクセスし、doneが表示されるかどうか検証します。

    phpの開始タグ直後に入れてみて、表示されるのであれば、数カ所あるif分岐の前に挿入位置を変えてみて、どこまで実行されているかを確認します。

    あと1点気になるのは、呈示いただいているファイルURLのドメイン名直後がblogになっている点です。本来、blogというのは、予約語となっており、子ブログのURLとしては利用できないはずです。表示できない原因は、むしろこちらにあるかもしれません。

    トピック投稿者 HalcionLunch

    (@halcionlunch)

    >jim912さん
    ありがとうございます。

    >正確には管理画面のツール > ネットワークにて確認してください。
    ツールには「ネットワーク」はありません。「ツール」「インポート」「エクスポート」のみです。
    (これもマルチサイトだからでしょうか)

    .htaccessの中をみてみました。

    RewriteEngine On
    RewriteBase /blog/

    #uploaded files
    RewriteRule ^(.*/)?files/$ index.php [L]
    RewriteCond %{REQUEST_URI} !.*wp-content/plugins.*
    RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]

    # add a trailing slash to /wp-admin
    RewriteCond %{REQUEST_URI} ^.*/wp-admin$
    RewriteRule ^(.+)$ $1/ [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule . – [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
    RewriteRule . index.php [L]

    <IfModule mod_security.c>
    <Files async-upload.php>
    SecFilterEngine Off
    SecFilterScanPOST Off
    </Files>
    </IfModule>

    だったので、

    #uploaded files
    RewriteRule ^(.*/)?files/$ index.php [L]
    RewriteCond %{REQUEST_URI} !.*wp-content/plugins.*
    RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]

      ↓

    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

    と変更しました。

    次に、wp-includes/ms-files.phpの最後に…


    // If we made it this far, just serve the file
    readfile( $file );
    ?>

      ↓


    // If we made it this far, just serve the file
    readfile( $file );
    echo ‘done’;
    exit;

    ?>

    としてみました。

    結果…

    でました!!!!

    アップロードすると、今まで表示しなかったプレビューができ、
    実際記事を見てみても問題ありませんでした。
    過去表示しなかったものも表示されました。

    画像のURLは以下のようになり、
    http://xxx.jp/blog/files/2010/08/xxx.jpg
    以下の場所に格納されています。
    http://xxx.jp/blog/wp-content/blogs.dir/1/files/2010/08/xxx.jpg
    と、今まで変化はしていませんが閲覧ができます。

    試しにブラウザアップローダー、 Flashアップローダーを切り替えたり、他のブログに切り替えましたが問題ないようです。

    もともとhttp://xxx.jp/は違うオープンソースを展開しており、
    WPのインストールはblogに、実際のブログURLもhttp://xxx.jp/blog/にしています。
    問題なくそれが求めるところであるので、もしなにかあればこちらを見直そうかと思います。

    1人ではとても解決しませんでした。
    みなさんありがとうございました。
    この記事が同じように悩みがあった人のお役にたてれば幸いです。

    モデレーター jim912

    (@jim912)

    HalcionLunchさん、こんにちは。

    echo 'done';
    exit;

    は、検証用のコードなので、用済みになったら削除しておいてくださいねー。

    それと、修正前の.htaccessは、3.0で統合される前のWordPress MU用のものです。
    3.0のインストールの前にMUのインストールなど、なされたりしませんでしたか?

    こんにちは。横から失礼します。

    ツールには「ネットワーク」はありません。「ツール」「インポート」「エクスポート」のみです。
    (これもマルチサイトだからでしょうか)

    wp-config.php に
    define ('WP_ALLOW_MULTISITE', true);
    を残しておくと、「ツール」⇒「ネットワーク」が表示されるようです。
    ネットワークの作成 – WordPress Codex 日本語版
    では、ネットワークの作業を終えると削除するように書かれています。

15件の返信を表示中 - 1 - 15件目 (全16件中)
  • トピック「画像のアップロードができない」には新たに返信することはできません。