質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

media_handle_uploadでSpecified file failed upload test.エラーが出る。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,737

s-plus-s

score 18

wordpressで会員制のサイトを作り、メンバーにカスタム投稿タイプの記事をフロントエンドからアップロードさせるフォームを作っています。

ソースコードはショートコード化してあり、固定ページにショートコードを書き込んで呼び出してあります。

カスタムフィールドを使用しそこに画像をアップロードしたいのですが、アップロード時に
Specified file failed upload test.
というエラーが出て、カスタムフィールドに画像のIDを保存できません。
後でメディアライブラリを調べると、画像自体はアップロードできています。

送信フォーム (テキストやチェックボックス、投稿ID等がありますが省略しています。)

<form method="post" action="固定ページのurl" enctype="multipart/form-data">
<input type="file" name="img1" multiple="false">
<input type="file" name="img2" multiple="false">
<input type="file" name="img3" multiple="false">
<input type="submit" class="button" name="save" value="送信">
</form>

送信先固定ページの処理

if ( $_FILES['img1'] ) {
    foreach ( $_FILES as $file => $array ) {
        if ( $_FILES[$file]['error'] !== UPLOAD_ERR_OK ) {
        echo "upload error : " . $_FILES[$file]['error'];                
        }
        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
        require_once(ABSPATH . "wp-admin" . '/includes/file.php');
        require_once(ABSPATH . "wp-admin" . '/includes/media.php');
        $attach_id_1 = media_handle_upload( 'img1' , $post_id );
    }
}
if ($attach_id_1 > 0){
    update_post_meta( $post_id ,'img1', $attach_id_1 );
}

if ( $_FILES['img2'] ) {
    foreach ( $_FILES as $file => $array ) {
        if ( $_FILES[$file]['error'] !== UPLOAD_ERR_OK ) {
        echo "upload error : " . $_FILES[$file]['error'];                
        }
        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
        require_once(ABSPATH . "wp-admin" . '/includes/file.php');
        require_once(ABSPATH . "wp-admin" . '/includes/media.php');
        $attach_id_2 = media_handle_upload( 'img2' , $post_id );
    }
}
if ($attach_id_2 > 0){
    update_post_meta( $post_id ,'img2', $attach_id_2 );
}

if ( $_FILES['img3'] ) {
    foreach ( $_FILES as $file => $array ) {
        if ( $_FILES[$file]['error'] !== UPLOAD_ERR_OK ) {
        echo "upload error : " . $_FILES[$file]['error'];                
        }
        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
        require_once(ABSPATH . "wp-admin" . '/includes/file.php');
        require_once(ABSPATH . "wp-admin" . '/includes/media.php');
        $attach_id_3 = media_handle_upload( 'img3' , $post_id );
    }
}
if ($attach_id_3 > 0){
    update_post_meta( $post_id ,'img3', $attach_id_3 );
}

また、データベースの

wp-postmeta

テーブルを調査したところ下記の結果でした。

meta_id      36722
post_id       6737
meta_key    img1
meta_value  O:8:"WP_Error":2:{s:6:"errors";a:1:{s:12:"upload_error";a:1:{i:0;s:34:"Specified file failed upload test.";}}s:10:"error_data";a:0:{}}

さらに送信先の処理に下記コードを加え調査を行いました。

echo ini_get(‘upload_max_filesize’);
echo ini_get(‘post_max_size’);
echo ini_get(‘memory_limit’);

echo(‘<pre>’);
var_dump( $_FILES[‘img1’] );
echo(‘</pre>’);

echo(‘<pre>’);
var_dump( $attach_id_1 );
echo(‘</pre>’);


結果は下記です。

4M
4M
128M

array(5) {
[“name”]=>
string(12) “image215.jpg”
[“type”]=>
string(10) “image/jpeg”
[“tmp_name”]=>
string(14) “/tmp/php0IwhdY”
[“error”]=>
int(0)
[“size”]=>
int(217336)
}

object(WP_Error)#14965 (2) {
[“errors”]=>
array(1) {
[“upload_error”]=>
array(1) {
[0]=>
string(34) “Specified file failed upload test.”
}
}
[“error_data”]=>
array(0) {
}
}

media_handle_uploadで画像のアップロードは出来ているのに、何故返り値にWP_Errorが返ってくるのでしょうか?

投稿のカスタムフィールドに画像のIDを保存し、それを元に画像を表示させたいのですが、カスタムフィールドにはWP_Errorの内容が保存されています。

以上です。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る