0

Jquery アップローダーを使用して、自分の Web サイトに画像をアップロードしています。ファイルを操作するために、uploadhandler.php というファイルを使用します。uploadhandler.php の内部には、ファイル名のフォーマット方法などを変更するように見える次の関数があります。私が抱えている問題は、ファイル名にスペースが含まれるファイルをアップロードすると、スペースが削除されていないように見えることです。ファイル名。ファイル名のスペースを削除するコマンドを追加するために編集する方法を知っている人はいますか?

 protected function trim_file_name($name, $type, $index, $content_range) {

    // Remove path information and dots around the filename, to prevent uploading

    // into different directories or replacing hidden system files.

    // Also remove control characters and spaces (\x00..\x20) around the filename:

    $file_name = trim(basename(stripslashes($name)), ".\x00..\x20");

    // Add missing file extension for known image types:

    if (strpos($file_name, '.') === false &&

        preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) {

        $file_name .= '.'.$matches[1];

    }

    while(is_dir($this->get_upload_path($file_name))) {

        $file_name = $this->upcount_name($file_name);

    }

    $uploaded_bytes = $this->fix_integer_overflow(intval($content_range[1]));

    while(is_file($this->get_upload_path($file_name))) {

        if ($uploaded_bytes === $this->get_file_size(

                $this->get_upload_path($file_name))) {

            break;

        }

        $file_name = $this->upcount_name($file_name);

    }

    return $file_name;

}
4

1 に答える 1

6

この線:

$file_name = trim(basename(stripslashes($name)), ".\x00..\x20");

x20スペースであるビットのために、「foo」などのファイル名の「周り」のスペースを削除します。この行の直後に追加するだけです。

$file_name = str_replace(" ", "", $file_name);

そんなに簡単!また、で2番目のパラメータを使用する場合は、マニュアル( http://php.net/trimtrim() )にリストされている文字の「デフォルト」リストを削除して、独自の文字に置き換えてください...

私はまた指摘します、私はブラウザによって与えられたファイル名を決して$_FILES[$x]['name']使用しません...それは単にあまりにも多くの質問と可能性を開きます。この問題を完全に回避するための1つの手法は、ファイルの内容md5()のまたはまたは類似のものを使用することです。例:sha1()

$file_name = md5_file($_FILES['your_file_tag_name']['tmp_name']);

そうすれば、理論的には、ファイルにスペースや「ダーティ」なファイル名が含まれることはありません...さらに、ユーザーがまったく同じ内容の2つのファイルをアップロードした場合は、ファイルの存在を確認するだけで済みます。それはすでに存在し、あなたはすでにまったく同じファイルを持っています。これがお役に立てば幸いです。これはすべて、ファイルのアップロードを行っていることを前提としていますが、100%確実ではありません。

于 2012-12-05T20:25:03.280 に答える