1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu kỹ thuật upload file trong PHP

148 905 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 148
Dung lượng 11,18 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nội dung trình bày Tìm hiểu kỹ thuật upload file trong PHP và webserver Apache. Tìm hiểu phương pháp giải quyết việc tên file trùng nhau. Tìm hiểu các hàm quản lý file và thư mục trên server. Tìm hiểu các hàm nén file

Trang 1

Nguyễn Hữu Đại - 06HC026

La Tấn Đức - 06HC032 Nguyễn Ái Quang Huy - 06HC065 Phạm Hồng Nhật - 06HC122 Nguyễn Quang Tâm - 06HC150

Trang 3

Phần bài tập

 Tìm hiểu trang web Image Gallery Trình

bày cách tổ chức file và cách cài đặt của

trang web

 Xây dựng trang web quản lý file: cho phép upload, edit, copy, move, delete file hay folder trên server

Trang 4

Nội dung:

- Kỷ thuật upload file trong PHP webServer Apache

Trang 5

 Các nhà phát triển web cho phép users có thể upload file của họ để chia sẻ cho bạn

Trang 6

move_uploaded_file ($_FILE['file_uploa d']['tmp_name'],"destination")

 Giá trị trả về : TRUE nếu thành công

 Giá trị trả về : FALSE nếu thất bại

Trang 7

 Sử dựng biến toàn cục $_FILE để xác

định các thuộc tính của file

 $_FILE['file_upload']['name'] : Tên file

(file_upload) upload lên server

 - $_FILE['file_upload']['size'] : Kích thước của file

- $_FILE['file_upload']['type'] : Kiểu file

Trang 8

 - $_FILE['file_upload']['tmp_name'] : Tên thư mục tạm trên server để chứa file

 - $_FILE['file_upload']['error'] : Thông báo lỗi khi upload file

Trang 9

Constant Name Valu

UPLOAD_ERR_OK 0 Thành công

UPLOAD_ERR_INI_SIZE 1 Kích thước file vượt quá mức được cấu

hình trong file php.ini

UPLOAD_ERR_FORM_S

IZE

2 Kích thước file vượt quá Max_Size được

thiết lập trong hidden fiel

UPLOAD_ERR_PARTIA

L

UPLOAD_ERR_NO_FILE 4 Không thành công

Trang 16

Nội dung:

CÁC HÀM QUẢN LÝ FILE & THƯ

MỤC TRÊN SERVER

Trang 17

1. chdir

 bool chdir(string dir) : chuyển đổi thư mục

làm việc hiện hành sang thư mục dir

 Return:

▪ Flase : nếu không thể chuyển đổi thư mục hiện hành.

▪ True : mọi trường hợp còn lại.

▪ Trường hợp chdir() flase, một cảnh báo được sinh ra Để

Trang 19

2. Closedir

 void closedir(resource_pointer dir_stream) :

được dùng để hủy luồng(thư mục) đã được

mở trước đó bằng hàm opendir()

 Hầu như không cần thiết dùng hàm closedir()

Trang 20

3 Dir

 mixed dir(string dir) :khi gọi hàm nó mở một luồng

tới thư mục dir và trả về một đối tượng và đồng thời tạo ra một con trỏ cho luồng này.

$object_name = dir ('directory_path');

 Đối tượng trả về chứa 3 phương thức:

Trang 21

 Ex: liệt kê mọi thư mục trong thư mục hiện hành.

$directory = getcwd ();

$dir_object = @ dir ($directory) or die ("Could not

open a directory stream for <i>$directory</i>"); print_r ($dir_object);

Trang 22

4. readdir

 string readdir(resource_pointer

dir_stream) : đọc ra các muc từ luồng thư mục được mở

Trang 23

 Ex:

$directory = getcwd ();

$directory_stream = @ opendir ($directory) or die ("Could not open a directory stream for <i>$directory</i>"); while ($entry = readdir ($directory_stream))

Trang 25

 Những hàm thông dụng:

chgrp; chmod; chown; clearstatcache;

copy; diskfreespace; fclose; feof; fgetc; fgetcsv; fgets; fgetss; file; fileatime;

filegroup; fileinode ; filemtime; fileowner; fileperms; filesize; filetype; file_exists;

flock; fopen; fpassthru; fputs; fread;

Trang 26

 bool chmod(string file, int mode) :Thay đổi quyền truy cập trên file.

 Ex : thay đổi quyền truy cập file tới rw-r r "

"-$file = "test_file";

Trang 27

 bool chown(string file, mixed user) : thay đổi quyền sở hữu của file.

 Ex: Thay quyền sở hữu là “user”

$file = "test_file";

if (! chown ($file, "user"))

Trang 28

 bool copy(string from, string to) :sao chép file

 Ex:Tạo bản copy sao lưu của một file

$file = "file";

$file_new = $file ".backup";

Trang 29

 bool fclose(resource file_handle) : đóng file

 Ex : mở và đóng một file

$fh = fopen ("test.txt", "r");

fclose ($fh);

Trang 30

 bool feof(resource file_handle): kiểm tra đã duyệt đến cuối file chưa

 Ex: Đọc một file cho đến hết

$fh = fopen ("test.txt", "r");

while(! feof ($fh))

{ $output = htmlspecialchars(fgets($fh,

Trang 31

 string fgetc(resource file_handle) :đọc một ký tự từ file

 Ex: Đọc từng ký tự trong file

$fh = fopen("test.txt", "r");

while (! feof ($fh))

Trang 32

 string fgets(resource file_handle, int

Trang 33

 string fgetss(resource file_handle, int

bytes) : Đọc một dòng từ file loại bỏ mọi thẻ HTML và thẻ PHP

 Ex

$fh = fopen("test.txt", "r");

while(!feof($fh))

{ $output = fgetss($fh, 1024);

Trang 34

 array file(string filename) : Đọc một file trong mảng

 Ex

$file_array = file("test.txt");

for($i = 0; $i < count($file_array); $i++) { echo ("\$file_array[$i] equals

Trang 35

 int fileatime(string filename) :lấy thời gian truy cập cuối của file

 Ex

$filetime = fileatime("myfile");

echo (date("d M Y", $filetime));

Trang 36

 int filectime(string filename) : lấy thời gian mà file được thay đổi lần cuối

 Ex

$filetime = filectime("myfile");

echo (date("d M Y", $filetime));

Trang 37

 int filegroup(string filename) :Lấy ID nhóm file

 Ex

$filegroup = filegroup("myfile");

echo ($filegroup);

Trang 38

 int fileowner(string filename) :lấy ID chủ sở hữu file

 Ex:

$fileowner = fileowner("myfile");

echo ($fileowner);

Trang 39

 int fileperms(string filename) :lấy quyền truy cập file.

 Ex:

$fileperms = fileperms("myfile"); echo ($fileperms);

Trang 40

 int filesize(string filename) :lấy kích thước file

 Ex:

$filesize = filesize("myfile");

echo ($filesize);

Trang 41

 string filetype(string filename) :lấy kiểu file

 Ex:

$filetype = filetype("myfile");

echo ($filetype);

Trang 42

 bool file_exists(string filename) :Xác định sự tồn tại file.

 Ex:

if(!file_exists("myfile"))

{ echo ("File not found"); }

Trang 43

 bool flock(resource file_handle, int operation)

Thực hiện khóa hay giải phóng file

 Operation:

 1: giành khóa đọc (reader)

 2: giành khóa ghi độc quyền (writer)

Trang 45

 bool fputs(resource file_handle, string data, [int bytes]) : Ghi ra file

 Ex:

$string = "Hello World!\n";

$file = "test.txt"; $fh = fopen($file,"w");fputs($fh, $string);

Trang 46

 string fread(resource file_handle, int bytes) Đọc từ file

Trang 47

 int fseek(resource file_handle, int offset) Di chuyển trong file

 Ex : in ra các ki tự xen kẽ trong file

$fh = fopen("test.txt", "r");

$a = 0;

while(!feof($fh))

{ fseek($fh, $a);

Trang 48

 bool is_file(string filename): kiểm tra

có đúng là file hay không

Trang 49

 bool is_readable(string filename) :kiểm tra file có thể đọc không

Trang 50

 bool is_writeable(string filename) :Kiểm tra file có cho phép ghi không

Trang 52

 RAR thì thông dụng và hiệu quả

trong lưu trữ tài liệu, được tạo bởi Eugene Roshal

 Chỉ hỗ trợ việc đọc file RAR, không

hỗ trợ việc ghi file RAR

 Cài đặt:

Trang 54

bool rar_close ( resource $rar_file ):

Đóng file RAR và giải phóng tài

nguyên

RarEntry rar_entry_get ( resource

$rar_file , string $entry_name ) : lấy các mục lưu trữ từ file RAR

Trang 55

bool Rar:: extract ( string $dir [,

string $filepath ] ): giải nén dữ liệu mục lưu trữ đến thư mục

Trang 56

int Rar:: getAttr ( void ): trả vể

thuộc tính của mục lưu trữ

int Rar:: getCrc ( void ): trả về CRC

của mục lưu trữ

string Rar:: getFileTime ( void ): lấy

Trang 57

int Rar:: getHostOs ( void ): trả về code

của Host của mục lưu trữ

Trang 58

string Rar:: getName ( void ): trả về

tên của mục lưu trữ

Trang 59

int Rar:: getPackedSize ( void ): lấy

kích thước gói của mục lưu trữ

Trang 60

int Rar::getUnpackedSize ( void ):

lấy kích thước thực của gói của mục lưu trữ

Trang 61

int Rar::getVersion ( void ): lấy

Version

Trang 62

array rar_list ( resource $rar_file ):

lấy danh sách các entry

Trang 63

 Mục đích : Đọc / Ghi file ZIP

 Cài đặt – cấu hình : Để làm việc với

các tập tin Zip trên máy chủ, ta phải cài đặt thêm các thư viện sau :

 Các Zip PELC mở rộng :

Các hàm nén file thì mặc định không được kích

Trang 64

mixed zip_open ( string $filename ): Mở 1

file zip để đọc.

mixed zip_read ( resource $zip ): Đọc 1 mục

nhập kế tiếp trong file zip.

void zip_close ( resource $zip ) : Đóng 1 file

Zip.

<?php

$zip = zip_open("test.zip");

Trang 65

bool zip_entry_close ( resource

$zip_entry ): Đóng 1 mục nhập trong file zip.

( resource $zip_entry ): Trả về kích thước nén của 1 mục nhập trong file zip.

Trang 66

int zip_entry_filesize ( resource $zip_entry ):

Trả về kích thước thực tế của file của 1 mục

nhập trong file zip.

string zip_entry_name ( resource $zip_entry ):

Trả về tên của 1 mục nhập trong file zip.

bool zip_entry_open ( resource $zip ,

resource $zip_entry [, string $mode ] ): Mở 1

mục nhập trong file zip để đọc.

Trang 67

bool ZipArchive::addEmptyDir ( string

$dirname ): thêm thư mục trống trong thư mục nén.

Trang 68

bool ZipArchive::addFile ( string

$filename [, string $localname ] ): thêm file vào thư mục nén

Trang 69

bool ZipArchive::addFromString ( string

$localname , string $contents ): Thêm một file đến thư mục zip sử dụng nội dung của nó

VD 1: Add an entry to a new archive

Trang 70

VD 2: Add file to a directory inside an archive

Trang 71

bool ZipArchive::close ( void ):

Đóng một thư mục nén đã mở hoặc tạo và lưu sự thay đổi Phương thức này tự động gọi khi kết thúc script

Trang 72

bool ZipArchive::deleteIndex ( int

$index ): Xóa một entry trong thư

mục nén sử dụng chỉ số của nó

Trang 73

bool ZipArchive::deleteName

(string $name): Xóa một entry trong thư mục nén sử dụng tên của nó

Trang 74

resource ZipArchive::extractTo

(string $destination [,resource

$entries ]): Giải nén toàn bộ thư mục nén hoặc đưa file đến đích xác định

 $destination: Vị trí chứa file giải nén

 $entries: Những entry được giải nén, bao gồm tên của entry hoặc mảng các entry

Trang 75

 Vd1 : Giải nén tất cả entry

Trang 76

 Vd2: giải nén chỉ 2 entry

Trang 77

 string

ZipArchive::getArchiveComment

( void ): Trả về comment của thư

mục nén

Trang 78

 string

ZipArchive::getCommentIndex

(int $index [,int $flags]): Trả về

comment của entry sử dụng index

của entry đó

 $flags: Nếu được đặt là

thì trả về comment

Trang 79

 string

ZipArchive::getCommentName

( int $name [, int $flags ] ): Trả về

comment của entry sử dụng tên của entry đó

 $flags: Nếu được đặt là

thì trả về comment

Trang 82

 Vd1: lấy file nội dung

Trang 83

 Vd2 : Chuyển 1 file ảnh từ một entry được nén

Trang 84

string ZipArchive::getNameIndex

( int $index ): Trả về tên của một

entry sử dụng index của nó

resource ZipArchive::getStream

( string $name ): lấy file điều khiển

để định nghĩa entry bằng tên của nó

mixed ZipArchive::locateName

Trang 85

resource ZipArchive::open ( string

$filename [, int $flags ] ): Mở một

thư mục lưu trữ file zip mới để đọc, ghi hoặc chỉnh sửa

 $flags : Các mode dùng để mở file nén

ZIPARCHIVE::OVERWRITE

ZIPARCHIVE::CREATE

Trang 86

bool ZipArchive::renameIndex

( int $index , string $newname): Đổi tên một entry được định nghĩa bởi chỉ số của entry

Trang 87

bool ZipArchive::renameName

( string $name , string $newname ): Đổi tên một entry được định nghĩa bởi tên của entry

Trang 91

mixed ZipArchive::statIndex ( int $index [, int

$flags]): Hàm chứa thông tin về entry được định nghĩa bởi chỉ số

 $flags: ZIPARCHIVE::FL_UNCHANGED dùng để yêu cầu thông tin về file gốc trong thư mục nén, loại bỏ tất cả những thay đổi đã thực hiện.

mixed ZipArchive::statName ( name $name [,

int $flags ] ): Hàm chứa thông tin về entry được định nghĩa bởi tên

Trang 92

mixed ZipArchive::unchangeArchive

( void ): trả lại tất cả các thay đổi cục bộ

$index ): trả lại tất cả thay đổi đã hoàn

thành đến entry lúc lấy index

( string $name ): trả lại tất cả các thay đổi đến entry

Trang 93

Thường được dùng để đọc/ ghi các file

nén bzip2 ( bz2 )

Trang 94

resource bzopen ( string $filename ,

string $mode ): mở file bzip2 ( bz2)

để đọc và ghi

Trang 95

string bzread ( resource $bz [, int

$length ] ): đọc file nén bzip2

Trang 96

int bzwrite ( resource $bz , string

$data [, int $length ] ) : ghi chuỗi lên file bzip2

Trang 97

int bzclose ( resource $bz ): Đóng

các file bzip2

mixed bzcompress ( string $source

[, int $blocksize [, int

$workfactor ]] ): nén chuỗi và trả ra kiểu bzip2

Trang 98

mixed bzdecompress ( string

$source [, int $small ] ): giải nén cho các chuỗi nén bzip2

Trang 99

int bzerrno ( resource $bz ): trả về mã lỗi của

bzip2 bị lỗi.

array bzerror ( resource $bz ): trả về mã lỗi và

chuỗi lỗi của bzip2 bị lỗi.

string bzerrstr ( resource $bz ) : lấy chuỗi lỗi

int bzflush ( resource $bz ): ghi các dữ liệu còn

trên buffer.

LZF

Trang 100

string lzf_compress ( string $data ):

nén dữ liệu dùng kiểu lzf

string lzf_decompress ( string

$data ): giải nén cho các chuỗi dữ

liệu mã hóa theo lzf

int lzf_optimized_for ( void ): Xác

định những gì đã được LZF tối ưu hóa

Trang 102

Add New Album

Trang 103

Display Album List

Display Image List

Display Image Detail

Trang 104

CREATE TABLE tbl_album (

al_id INT NOT NULL AUTO_INCREMENT,

al_name VARCHAR(64) NOT NULL,

al_description TEXT NOT NULL,

al_image VARCHAR(64) NOT NULL,

al_date DATETIME NOT NULL,

PRIMARY KEY(al_id)

);

CREATE TABLE tbl_album (

al_id INT NOT NULL AUTO_INCREMENT,

al_name VARCHAR(64) NOT NULL,

al_description TEXT NOT NULL,

al_image VARCHAR(64) NOT NULL,

al_date DATETIME NOT NULL,

PRIMARY KEY(al_id)

); CREATE TABLE tbl_image (im_id INT NOT NULL AUTO_INCREMENT,

im_album_id INT NOT NULL, im_title VARCHAR(64) NOT NULL, im_description TEXT NOT NULL, im_type VARCHAR(30) NOT NULL,

CREATE TABLE tbl_image ( im_id INT NOT NULL AUTO_INCREMENT, im_album_id INT NOT NULL,

im_title VARCHAR(64) NOT NULL, im_description TEXT NOT NULL, im_type VARCHAR(30) NOT NULL,

Trang 120

1. Cơ sở dữ liệu

4. Code trang add_file.php

Trang 121

1. Cơ sở dữ liệu :

Table uploads gồm có các thuộc tính sau:

upload_id int(10) unsigned not null

auto_increment

file_name varchar(30) not null

file_size int(6) unsigned not null

file_type varchar(30) not null

description varchar(100) default null

Trang 122

2. Code trang mysql_connect.php: Code trang mysql_connect.php

▪ Thiết lập thông tin CSDL dưới dạng các hằng : define ('DB_USER', "root");

define ('DB_PASSWORD', "");

define ('DB_HOST', "localhost");

define ('DB_NAME', "vidu");

Trang 123

▪ Kết nối với MySQL và chọn cơ sở dữ liệu :

$conn = @mysql_connect (DB_HOST,

DB_USER, DB_PASSWORD) OR die ('I

cannot connect to the database because: ' mysql_error());

mysql_select_db (DB_NAME) OR die ('Could

not select the database:' mysql_error());

Trang 124

(1) Cho biết việc upload có được phép hay không.

(2) Xác định nơi các tập tin upload được lưu tạm

Trang 125

Cấu hình thư mục uploads :

 Thiết lập các quyền trên thư mục uploads

để máy chủ có thể ghi chép vào đó

Trước khi lưu tập tin xuống csdl thì tập tin sẽ

được lưu tạm thời trong thư mục uploads với tên tập tin là tạm thời

Trang 126

Cấu hình như hình sau:

Trang 127

4 Code trang add_file.php :

Kiểm tra xem biểu mẫu được đưa lên không và kiểm tra phần mô tả :

Trang 128

- Hàm escape_data() xử lý các giá trị đưa lên để

đảm bảo an toàn cho csdl, cho dù đặc điểm

magic_quotes có kích hoạt hay không.

-Magic_quotes là một đặc điểm tiện lợi được cài đặt sẳn trong php.Khi kích hoạt nó sẽ tự động mã hoá escape các dấu nháy đơn và kép trong giá trị nhận được của các biến.

Trang 129

Chèn mẫu tin vào csdl cho phần tải lên:

$query = "INSERT INTO uploads

(file_name,file_size,file_type,description,upload_dat e)

VALUES('{$_FILES['upload']['name']}',

{$_FILES['upload']['size']},'{$_FILES['upload']

['type']}','$d',NOW())";

Trang 130

Tập tin tải lên được chèn vào csdl bằng câu truy vấn này.Nó dùng mảng 2 chiều $_FILES để chèn tên tập tin gốc, kích thước và kiểu MIME.Tất cả thông tin này được cung cấp từ trình duyệt

Web.Phần mô tả và thời gian hiện tại cũng được lưu.

Trang 131

Tạo tên tập tin mới:

Trang 132

- Tập tin được lưu trên máy chủ với tên mới.Điều này

an toàn hơn nếu sử dụng tên gốc do người dùng

đặt.Tên của tập tin sẽ là giá trị của trường upload_id ứng với nó từ csdl (được lấy ra bằng hàm

mysql_insert_id()),theo sau là dấu chấm rồi đến phần

mở rộng tập tin(được xác định bằng cách tách tên tập tin gốc).Ví dụ như tập tin image.jpg được lưu với tên 49.jpg trong uploads

Ngày đăng: 28/07/2014, 11:02

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w