3

私は Codeigniter に問題があり、アップロード ライブラリからのアップロード プロセス内でファイルの名前を変更しています。誰かが言う前に、私は「暗号化された」ファイル名を探していません。

私の問題は、あなたが扱うことができる一握りのタイプを持つ画像をアップロードすることです。では、configオプションを使用してファイル名を特定のスキーマに変更するにはどうすればよいですかfile_name(スキーマ部分はすでに稼働しています)。しかし、同じファイル タイプを維持しますか?

今、私は試みています

$upload_config['file_name'] = $generated_filename_from_schema

唯一の問題は$generated_filename_from_schema、ファイル拡張子がないことです。ファイル拡張子を式から除外すると、CI はそれを完全に無視するように見え、ファイルが同じ名前の場合はファイルと append_1、_2、_3 を取得します。名前はそのまま残します。

ファイルをアップロードするようにCIに渡す必要が$configありますが、名前生成スキーマを使用できるように、アップロードを試みる前に、どのような種類のファイルを扱っているかを判断するにはどうすればよいですか。

*編集*

    $upload_config['upload_path'] = realpath(APPPATH.'../images/');
    $upload_config['allowed_types'] = 'gif|jpg|png';
    $upload_config['max_size']  = 0;
    $upload_config['max_width'] = 0;
    $upload_config['max_height'] = 0;
    $upload_config['remove_spaces'] = true;

    $upload_config['file_name'] = $this->genfunc->genFileName($uid);

    if($this->input->post('uploads'))
    {

        $this->load->library('upload');
        $this->upload->initialize($upload_config);

        if (!$this->upload->do_upload())
        {
            //echo 'error';
            echo $config['upload_path'];
            $this->data['errors'] = $this->upload->display_errors();
        }
        else
        {
            //echo 'uploaded';
            $this->data['upload_data'] = $this->upload->data();
        }
    }
4

2 に答える 2

10

$_FILES 配列を使用して、ファイルの元の名前を取得できます。

元のファイルの拡張子を抽出し、新しいファイル名に追加します。

以下のようにしてみてください

$ext = end(explode(".", $_FILES[$input_file_field_name]['name']));
$upload_config['file_name'] = $this->genfunc->genFileName($uid).'.'.$ext;
于 2012-09-30T06:00:49.960 に答える
2

個人的には、CodeIgniter のファイル アップロード クラスはやや面倒だと思います。バニラの PHP ソリューションが必要な場合:

function submit_image(){
    $f = $_FILES['image'];
    $allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
    $detectedType = exif_imagetype($f['tmp_name']);
    if(in_array($detectedType, $allowedTypes)){
        $pi = pathinfo($f['name']);
        $ext = $pi['extension'];
        $target = $this->genfunc->genFileName($uid) "." . $ext;
        if(move_uploaded_file($f['tmp_name'], $target)){
            /*success*/
        }
        else {/*couldn't save the file (perhaps permission error?*/}
    }
    else {/*invalid file type*/}
}
于 2012-09-30T17:24:46.667 に答える