3

私は現在、PHPファイルのアップロードにこのコードを使用しています(ワードプレスのページに直接あります):

<form enctype="multipart/form-data" action="upload.php" method="POST">
Please choose a file: <input name="uploaded" type="file" /><br />
<input type="submit" value="Upload" />
</form> 

upload.php

    $allowedExts = array("jpg", "jpeg", "gif", "png");
    $extension = end(explode(".", $_FILES["file"]["name"]));
    if ((($_FILES["file"]["type"] == "image/gif")
         || ($_FILES["file"]["type"] == "image/jpeg")
         || ($_FILES["file"]["type"] == "image/png")
         || ($_FILES["file"]["type"] == "image/pjpeg"))
        && ($_FILES["file"]["size"] < 20000)
        && in_array($extension, $allowedExts))
    {
        if ($_FILES["file"]["error"] > 0)
        {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
            echo "Upload: " . $_FILES["file"]["name"] . "<br>";
            echo "Type: " . $_FILES["file"]["type"] . "<br>";
            echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

            if (file_exists("upload/" . $_FILES["file"]["name"]))
            {
                echo $_FILES["file"]["name"] . " already exists. ";
            }
            else
            {
                move_uploaded_file($_FILES["file"]["tmp_name"],
                                   "upload/" . $_FILES["file"]["name"]);
                echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
            }
        }
    }
    else
    {
        echo "Invalid file";
    }

100%動作するはずだとわかっていても、常に「無効なファイル」を返します。

私はオンラインで周りを見回していて、WPはenctype = "multipart / form-data"を実行できないと思うので、それが機能しない理由です。

誰かが回避策を持っていますか、またはこれがうまくいかない理由について何か考えがありますか?

4

5 に答える 5

9

私はこの投稿が少し古いことを知っていますが、うまくいけば他の人を助けるでしょう。

私は非常によく似た処理を行っており(カスタムアップロードをカスタムページに表示するため)、実際にはとまったく同じコードを使用していましobjectiveccoder001た。「無効なファイル」を取得し続けました。書き込み許可エラー。私はこれで行くことになった:

if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
$uploadedfile = $_FILES['file'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile ) {
    echo "File is valid, and was successfully uploaded.\n";
    //var_dump( $movefile);
} else {
    echo "Possible file upload attack!\n";
}

Wordpressのメディアアップローダーを使用する必要がなく、単純なファイルのアップロードが必要な場合に最適です。組み込みのアップローダーのような古いファイル構造を使用してアップロードします。次に、$movefile配列を使用してファイルのデータを取得できます。

参照:http ://codex.wordpress.org/Function_Reference/wp_handle_upload

于 2014-05-23T18:26:19.950 に答える
3

このコードを使用してWordPressのデフォルトのメディアファイルアップローダーを使用し、jqueryで画像のリンクを取得するだけです。

<label for="upload_image">
        <input id="upload_image" type="text" size="36" name="ad_image" value="http://" /> 
        <input id="upload_image_button" class="button" type="button" value="Upload Image" />
        <br />Enter a URL or upload an image
    </label>

<?php
add_action('admin_enqueue_scripts', 'my_admin_scripts');

function my_admin_scripts() {
    if (isset($_GET['page']) && $_GET['page'] == 'my_plugin_page') {
        wp_enqueue_media();
        wp_register_script('my-admin-js', WP_PLUGIN_URL.'/my-plugin/my-admin.js', array('jquery'));
        wp_enqueue_script('my-admin-js');
    }
}

?>

<script>
    jQuery(document).ready(function($){


    var custom_uploader;


    $('#upload_image_button').click(function(e) {

        e.preventDefault();

        //If the uploader object has already been created, reopen the dialog
        if (custom_uploader) {
            custom_uploader.open();
            return;
        }

        //Extend the wp.media object
        custom_uploader = wp.media.frames.file_frame = wp.media({
            title: 'Choose Image',
            button: {
                text: 'Choose Image'
            },
            multiple: true
        });

        //When a file is selected, grab the URL and set it as the text field's value
        custom_uploader.on('select', function() {
            console.log(custom_uploader.state().get('selection').toJSON());
            attachment = custom_uploader.state().get('selection').first().toJSON();
            $('#upload_image').val(attachment.url);
        });

        //Open the uploader dialog
        custom_uploader.open();

    });


});
    </script>
于 2015-06-19T09:30:34.447 に答える
3

WordPressの新しいバージョンでは、ファイルのアップロードは非常に簡単です。たった1行のコード:

$uploaded_file = wp_upload_bits( $_FILES['file']['name'], null, @file_get_contents( $_FILES['file']['tmp_name'] ) ); 

$ uploaded_fileは、URL、ファイルタイプなどを含むすべての情報を返す配列です。

于 2019-09-26T10:18:00.900 に答える
2

WordPressのカスタムディレクトリにファイルをアップロードする方法

この例では、wp-content / uploads/customDirectoryフォルダーにPDFドキュメントをアップロードします

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submittheform">
</form>

global $wp_filesystem;
WP_Filesystem();

$content_directory = $wp_filesystem->wp_content_dir() . 'uploads/';
$wp_filesystem->mkdir( $content_directory . 'CustomDirectory' );

$target_dir_location = $content_directory . 'CustomDirectory/';
 
if(isset($_POST["submittheform"]) && isset($_FILES['fileToUpload'])) {
 
    $name_file = $_FILES['fileToUpload']['name'];
    $tmp_name = $_FILES['fileToUpload']['tmp_name'];
 
    if( move_uploaded_file( $tmp_name, $target_dir_location.$name_file ) ) {
        echo "File was successfully uploaded";
    } else {
        echo "The file was not uploaded";
    }
 
}
于 2021-01-17T15:34:15.903 に答える
-5

WordPressの組み込みアップローダーを使用してファイルをアップロードしてみませんか?これは、 WordPressアップローダー
を実装する方法についての簡単なチュートリアルです

WordPressアップローダー

于 2013-03-15T04:17:48.753 に答える