web-dev-qa-db-ja.com

WP_Image_EditorがファイルシステムAPIを使用して画像を保存しないのはなぜですか?

WP_Image_Editorsave関数、最後に_save(最後にmake_image)を呼び出すと、安全でないファイルシステムへのアクセスがないかどうか、既存のプラグインをチェックしていました。 WP_Image_EditorはWP 3.5でリリースされましたが、 Filesystem APIWP 2.6から登場してきました。そのため、この推論は、単に新しい標準を満たすために変更されるのではなく、ユースケースの詳細に関連すると思います。

protected function make_image( $filename, $function, $arguments ) {
    if ( $stream = wp_is_stream( $filename ) ) {
        ob_start();
    } else {
        // The directory containing the original file may no longer exist when using a replication plugin.
        wp_mkdir_p( dirname( $filename ) );
    }

    $result = call_user_func_array( $function, $arguments );

    if ( $result && $stream ) {
        $contents = ob_get_contents();

        $fp = fopen( $filename, 'w' );

        if ( ! $fp )
            return false;

        fwrite( $fp, $contents );
        fclose( $fp );
    }

    if ( $stream ) {
        ob_end_clean();
    }

    return $result;
}

私の質問は、この理由は何ですか? Otto氏によると、 ファイルシステムに直接アクセスすることは悪いことです それでは、この場合に問題にならない例外は何ですか?私は自分のプラグインが可能な限り最善の方法で動作するようにしたいのですが、これはベストプラクティスを識別するのを少し難しくします。

6
Dan

ファイルシステムに直接アクセスして書き込みを行うことは厄介です...人々が実際にそうしているほとんどの場合には。

あなたが画像ファイルを編集していて、それがwp-content/uploadsディレクトリにあるなら、あなたは知っています。それは一般的なケースではありません。プラグインやテーマは、そうする必要はないので、通常はそうしません。 WordPressには、それを実行するためのコードがあります。それは完全に安全です。

いいえ、プラグインとテーマを編集したいのは危険なことです。彼らは設定情報を含むPHPファイルを書きたい、カスタムCSSファイルを保存したい、あるいはそのようなことをしたいのです。彼らは、世界で編集可能であるために安全ではないすべてのものを書きたがっています。

私のサイトと同じ安っぽい共有サーバー上の誰かが私の画像などをいじることにした場合、それは厄介です。彼らが私のPHPコードや私のCSSをいじることにした場合、それはセキュリティ違反です。悪くなっているファイルシステムに直接書き込むことについての質問は、あなたが書いているものとそれがどんな文脈で使われているかに完全に依存します。

7
Otto