Bagaimana untuk mengendalikan muat naik fail dalam PHP?

WBOY
Lepaskan: 2023-05-11 22:32:02
asal
1941 orang telah melayarinya

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>
Salin selepas log masuk

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 "文件上传失败!";
}
Salin selepas log masuk

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 "非法的文件上传!";
}
Salin selepas log masuk

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 "非法的文件上传!";
}
Salin selepas log masuk

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");
Salin selepas log masuk

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 "上传文件超过了指定大小!";
}
Salin selepas log masuk

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>
Salin selepas log masuk

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;
}
Salin selepas log masuk

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 "不允许上传此类型的文件。";
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan