นิยามและการใช้งาน
ใน PHP Resource (ทรัพยากร) เป็นชนิดข้อมูลพิเศษที่อ้างอิงถึงแหล่งข้อมูลภายนอกทุกประเภท ตัวแปรทรัพยากรทำหน้าที่เป็นการอ้างอิงถึงแหล่งข้อมูลภายนอก เช่น สตรีม (stream), ไฟล์, ฐานข้อมูล ฯลฯ PHP ใช้ฟังก์ชันที่เกี่ยวข้องเพื่อสร้างทรัพยากรเหล่านี้ ตัวอย่างเช่น ฟังก์ชัน fopen() เปิดไฟล์ดิสก์และเก็บการอ้างอิงไว้ในตัวแปรทรัพยากร
Zend Engine ของ PHP ใช้ระบบนับการอ้างอิง (reference counting) ดังนั้น ทรัพยากรที่มีจำนวนการอ้างอิงเป็นศูนย์จะถูกทำลายโดยอัตโนมัติโดย Garbage Collector จึงไม่จำเป็นต้องปล่อยหน่วยความจำที่ใช้โดยชนิดข้อมูลทรัพยากรด้วยตนเอง
สามารถจัดการทรัพยากรหลายประเภทในสคริปต์ PHP ได้ด้วยฟังก์ชันที่สอดคล้องกัน ตารางด้านล่างแสดงรายการตัวอย่าง:
| ชื่อประเภททรัพยากร | สร้างโดย | ทำลายโดย | นิยาม |
|---|---|---|---|
| bzip2 | bzopen() | bzclose() | ไฟล์ Bzip2 |
| curl | curl_init() | curl_close() | เซสชัน Curl |
| ftp | ftp_connect() | ftp_close() | สตรีม FTP |
| mssql link | mssql_connect() | mssql_close() | ลิงก์ไปยังฐานข้อมูล Microsoft SQL Server |
| mysql link | mysql_connect() | mysql_close() | ลิงก์ไปยังฐานข้อมูล MySQL |
| mysql result | mysql_db_query() | mysql_free_result() | ผลลัพธ์ MySQL |
| oci8 connection | oci_connect() | oci_close() | การเชื่อมต่อฐานข้อมูล Oracle |
| ODBC link | odbc_connect() | odbc_close() | ลิงก์ไปยังฐานข้อมูล ODBC |
| pdf document | pdf_new() | pdf_close() | เอกสาร PDF |
| stream | opendir() | closedir() | จัดการไดเรกทอรี |
| stream | fopen(), tmpfile() | fclose() | จัดการไฟล์ |
| socket | - | fclose() | จัดการโซคเก็ต |
| xml | xml_parser_create() | xml_parser_free() | ตัวแยกวิเคราะห์ XML |
| zlib | gzopen() | gzclose() | ไฟล์บีบอัด gz |
| zlib.deflate | deflate_init() | ไม่มี | บริบทการบีบอัดแบบเพิ่มเติม |
| zlib.inflate | inflate_init() | ไม่มี | บริบทการถอดบีบอัดแบบเพิ่มเติม |
ในบริบทนี้ PHP มีฟังก์ชัน get_resource_type() ที่คืนค่าประเภททรัพยากรของตัวแปร
รูปแบบไวยากรณ์
get_resource_type ( resource $handle ) : string
โดยที่ $handle คือตัวแปรทรัพยากรที่ต้องการทราบประเภท ฟังก์ชันนี้จะคืนค่าสตริงที่สอดคล้องกับประเภททรัพยากร
ตัวอย่างต่อไปนี้แสดงประเภททรัพยากรของไฟล์ดิสก์:
ตัวอย่าง
<?php $fp=fopen("test.txt","w"); var_dump($fp); ?>
ผลลัพธ์
จะได้ผลลัพธ์ดังนี้:
resource(5) of type (stream)
ตัวอย่างต่อไปนี้ใช้ฟังก์ชัน get_resource_type():
ตัวอย่าง
<?php $fp = fopen("test.txt", "w"); echo get_resource_type($fp) . "\n"; ?>
ผลลัพธ์
จะได้ผลลัพธ์ดังนี้:
stream