3

このリポジトリを使用して、コンピュータからサーバーに写真をアップロードしています。mylogo.jpgというファイルをアップロードしようとすると、次のようなエラーが発生します。

読み取るためにファイルを開くことができませんでした:/tmp/php0d4X5Ny/mylogo.jpg

このエラーが発生する理由を理解する必要があります。

これがコントローラー(cloudfiles.php)からの私のコードです:

        public function add_local_file()
        {
                $file_location = $_FILES['userfile']['tmp_name'].'/';
                $file_name = $_FILES['userfile']['name'];

                $this->cfiles->do_object('a', $file_name, $file_location);

                $this->_show_errors('Image Added!');
        }

do_object関数はここにあります(151行目)。そして、これがアップロードビューです:

<?php echo form_open_multipart('cloudfiles/add_local_file'); ?>

<input type="file" name="userfile" size="20" />

<input type="submit" value="upload" />

<?php echo form_close(); ?>

cloudfilesライブラリを検索したところ、「読み取り用にファイルを開けませんでした」というエラーがこの関数の例外であることがわかりました。

function load_from_filename($filename, $verify=true)
    {
        $fp = @fopen($filename, "r");
        if (!$fp) {
            throw new IOException("Could not open file for reading: ".$filename);
        }

        clearstatcache();

        $size = (float) sprintf("%u", filesize($filename));
        if ($size > MAX_OBJECT_SIZE) {
            throw new SyntaxException("File size exceeds maximum object size.");
        }

        $this->_guess_content_type($filename);

        $this->write($fp, $size, $verify);
        fclose($fp);
        return True;
    }

私はこれを数時間見ていて、何が悪いのかわかりません。ちなみに、phpエラーは表示されませんが、上記の1つのエラーだけです。Stack Overflow(頻繁なブラウザ、新しいアカウント)は初めてですので、よろしくお願いします。

4

1 に答える 1

5

$_FILESアレイがどのように機能するかを理解していないと思います。ファイルがアップロードされると、ファイルはにあり、$_FILES['userfile']['tmp_name']元の名前はありません。

元の名前でファイルをアップロードする場合は、次のような操作を行う必要があります。

public function add_local_file()
{
    $file_location = '/tmp/';
    $file_name     = $_FILES['userfile']['name'];

    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $file_location . $file_name)){

        $this->cfiles->do_object('a', $file_name, $file_location);

    }

    $this->_show_errors('Image Added!');
}
于 2012-10-11T18:06:30.063 に答える