Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk mengendalikan muat naik fail dalam PHP?

Bagaimana untuk mengendalikan muat naik fail dalam PHP?

WBOY
WBOYasal
2023-05-11 22:31:341992semak imbas

Dengan perkembangan teknologi Internet yang berterusan, fungsi muat naik fail telah menjadi bahagian penting dalam banyak tapak web. Dalam bahasa PHP, kami boleh mengendalikan muat naik fail melalui beberapa perpustakaan dan fungsi kelas. Artikel ini akan menumpukan pada kaedah pemprosesan muat naik fail dalam PHP.

1. Tetapan borang

Dalam borang HTML, kita perlu menetapkan atribut enctype kepada "multipart/form-data" untuk menyokong muat naik fail. Kodnya adalah seperti berikut:

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="上传"/>
</form>

Antaranya, atribut jenis tag input ialah "fail" dan atribut nama ialah "fail", yang digunakan untuk menentukan nama fail yang dimuat naik.

2. Pemprosesan muat naik fail PHP

Dalam PHP, kami boleh menggunakan pembolehubah global $_FILES untuk memproses muat naik fail. Dengan mengandaikan bahawa fail yang dimuat naik dalam borang kami dinamakan "fail", maka dalam PHP, anda boleh mendapatkan maklumat fail yang dimuat naik melalui $_FILES['fail'].

tatasusunan $_FILES mengandungi lima elemen:

  1. nama: nama fail yang dimuat naik.
  2. jenis: Jenis fail yang dimuat naik.
  3. tmp_name: Laluan storan sementara bagi fail yang dimuat naik.
  4. ralat: kod ralat semasa memuat naik fail.
  5. saiz: Saiz fail yang dimuat naik (dalam bait).

Seterusnya kita boleh menggunakan fungsi move_uploaded_file() untuk mengalihkan fail yang dimuat naik ke folder yang ditentukan. Kodnya adalah seperti berikut:

$target_dir = "uploads/";   //上传文件的目标文件夹
$target_file = $target_dir . basename($_FILES["file"]["name"]);   //上传文件的完整路径
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
    echo "文件上传成功!";
} else {
    echo "文件上传失败!";
}

Dalam kod di atas, pembolehubah $target_dir menentukan folder sasaran fail yang dimuat naik dan pembolehubah $target_file mengandungi laluan penuh fail yang dimuat naik. Kita boleh menggunakan fungsi move_uploaded_file() untuk memindahkan fail sementara ke direktori yang ditentukan. Mengembalikan benar jika langkah itu berjaya, palsu sebaliknya.

Apabila memuat naik fail, untuk memastikan keselamatan fail, kami perlu melakukan semakan dan penapisan tertentu pada fail yang dimuat naik. Sebagai contoh, kita boleh menggunakan fungsi is_uploaded_file() untuk menyemak sama ada fail yang dimuat naik benar-benar datang daripada klien. Kodnya adalah seperti berikut:

if(is_uploaded_file($_FILES['file']['tmp_name'])){
    //处理上传文件
}else{
    echo "非法的文件上传!";
}

Kami juga boleh menggunakan fungsi getimagesize() untuk mendapatkan lebar dan ketinggian imej yang dimuat naik. Kodnya adalah seperti berikut:

if (is_uploaded_file($_FILES['file']['tmp_name'])) {
    $image_info = getimagesize($_FILES['file']['tmp_name']);
    echo "图片宽度:".$image_info[0]."<br/>";
    echo "图片高度:".$image_info[1]."<br/>";
    echo "图片类型:".$image_info[2]."<br/>";
} else {
    echo "非法的文件上传!";
}

3. Hadkan saiz fail yang dimuat naik

Had lalai dalam PHP ialah 2M dalam saiz fail yang boleh dimuat naik, tetapi kami juga boleh mengubahnya dengan mengubah suai fail konfigurasi atau menetapkannya dalam had PHP. Sebagai contoh, dalam fail php.ini, kami boleh menetapkan upload_max_filesize dan post_max_size untuk mengehadkan saiz fail yang dimuat naik.

Jika kami ingin menetapkan saiz maksimum fail yang dimuat naik dalam PHP, kami boleh menggunakan fungsi ini_set() untuk mengubah suai tetapan dalam php.ini. Kodnya adalah seperti berikut:

//设置上传文件的最大值为10M
ini_set("upload_max_filesize","10M");
ini_set("post_max_size","10M");

Kami juga boleh menggunakan $_SERVER['CONTENT_LENGTH'] untuk mendapatkan panjang kandungan dalam maklumat pengepala permintaan klien untuk menentukan sama ada fail yang dimuat naik melebihi saiz yang ditentukan. Kodnya adalah seperti berikut:

if($_SERVER['CONTENT_LENGTH'] > MAX_SIZE){
    echo "上传文件超过了指定大小!";
}

Di bahagian hadapan, anda juga boleh menggunakan pemalam jQuery.uploadFile.js untuk mengehadkan saiz fail yang dimuat naik. Kodnya adalah seperti berikut:

<input type="file" name="file" id="file"/>
<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/jquery.uploadfile.js"></script>
<script>
    $("#file").uploadFile({
        url: "upload.php",   //处理文件上传的PHP脚本
        maxFileSize: 1024*1024*5,   //最大上传文件的大小,此处为5M
    });
</script>

4. Mengendalikan ralat muat naik fail

Semasa memuat naik fail, anda mungkin menghadapi beberapa ralat. Contohnya, fail yang dimuat naik terlalu besar, jenis fail yang dimuat naik tidak dibenarkan, folder sasaran tidak wujud, dsb. Kami perlu menangani ralat ini untuk meningkatkan pengalaman pengguna dan keberkesanan muat naik fail.

Sesetengah kod ralat ditakrifkan dalam PHP untuk memudahkan penghakiman dan pemprosesan ralat kami. Contohnya:

  1. UPLOAD_ERR_OK (0): Muat naik berjaya.
  2. UPLOAD_ERR_INI_SIZE (1): Fail yang dimuat naik melebihi konfigurasi dalam php.ini.
  3. UPLOAD_ERR_FORM_SIZE (2): Fail yang dimuat naik melebihi nilai yang ditentukan oleh MAX_FILE_SIZE dalam borang.
  4. UPLOAD_ERR_PARTIAL (3): Hanya sebahagian daripada fail yang dimuat naik telah dimuat naik.
  5. UPLOAD_ERR_NO_FILE (4): Tiada fail dimuat naik.
  6. UPLOAD_ERR_NO_TMP_DIR(6): Folder sementara tidak ditemui.
  7. UPLOAD_ERR_CANT_WRITE(7): Penulisan fail gagal.

Kami boleh menggunakan pernyataan suis untuk mengendalikan ralat ini. Kodnya adalah seperti berikut:

switch ($_FILES['file']['error']) {
    case UPLOAD_ERR_OK:
        //上传成功
        break;
    case UPLOAD_ERR_INI_SIZE:
        echo "上传的文件超过了php.ini中的配置。";
        break;
    case UPLOAD_ERR_FORM_SIZE:
        echo "上传的文件超过了表单中的MAX_FILE_SIZE指定的值。";
        break;
    case UPLOAD_ERR_PARTIAL:
        echo "上传的文件只有部分被上传。";
        break;
    case UPLOAD_ERR_NO_FILE:
        echo "没有文件被上传。";
        break;
    case UPLOAD_ERR_NO_TMP_DIR:
        echo "找不到临时文件夹。";
        break;
    case UPLOAD_ERR_CANT_WRITE:
        echo "文件写入失败。";
        break;
    default:
        echo "未知错误。";
        break;
}

Jika anda ingin mengehadkan jenis fail yang dimuat naik kepada jenis tertentu, anda boleh menggunakan fungsi in_array() untuk membuat pertimbangan. Kodnya adalah seperti berikut:

$allowed_types = array('jpg', 'jpeg', 'gif', 'png');   //允许上传的文件类型
$filename = $_FILES['file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);   //获取文件类型后缀
if (!in_array($ext, $allowed_types)) {
    echo "不允许上传此类型的文件。";
}

5. Ringkasan

Muat naik fail adalah masalah biasa dalam pembangunan web PHP menyediakan pelbagai kaedah dan fungsi untuk mengendalikan muat naik fail. Sebagai tambahan kepada kaedah yang diperkenalkan di atas, kami juga boleh menggunakan perpustakaan kelas PHP untuk pemprosesan muat naik fail, seperti PHP File Uploader (https://www.github.com/verot/class.upload.php) dan FineUploader (https:/ / fineuploader.com/). Tidak kira kaedah yang digunakan, kami perlu memastikan keselamatan dan kesahihan fail yang dimuat naik.

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan muat naik fail dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn