บทนำ
Wrapper php:// เปิดใช้งานการเข้าถึงสตรีม I/O ต่างๆ รวมถึง standard input, output และ error streams สตรีมในหน่วยความจำ (in-memory), สตรีมที่เก็บบนดิสก์ และ filtered streams ก็เข้าถึงได้ด้วยโปรโตคอล php://
Standard streams
php://stdin, php://stdout และ php://stderr อนุญาตการเข้าถึงโดยตรง standard input stream device, standard output stream และ error stream ของกระบวนการ PHP ตามลำดับ ค่าคงที่ที่กำหนดไว้ล่วงหน้า STDIN, STDOUT และ STDERR แทนสตรีมเหล่านี้ตามลำดับ
php://input
php://input อนุญาตการเข้าถึงแบบอ่านอย่างเดียว (read-only) ข้อมูลดิบ (raw data) ใน HTTP request body โปรดทราบว่าข้อมูลเดียวกันนี้มีอยู่ในตัวแปร $HTTP_POST_RAW_DATA (ซึ่งถูก deprecated แล้ว) อย่างไรก็ตาม php://input ไม่พร้อมใช้งานเมื่อ enctype attribute ถูกตั้งเป็น multipart/form-data
php://output
Wrapper นี้เป็น write-only stream อนุญาตกลไก buffer คล้ายกับคำสั่ง print และ echo
php://fd
File descriptor เข้าถึงได้ผ่าน wrapper นี้ สตรีมมาตรฐาน STDIN, STDOUT และ STDERR ถูกกำหนด file descriptor 0, 1 และ 2 (ไม่ใช่ 1,2,3 ตามต้นฉบับ) สตรีมอื่นๆ จะได้รับ file descriptor ที่เพิ่มขึ้นทีละ 1 ดังนั้น php://fd/3 หมายถึง file descriptor 3
php://memory
เป็น read/write stream อนุญาตให้เก็บข้อมูลชั่วคราวในหน่วยความจำ Wrapper php://temp คล้ายกัน แต่ในกรณีนี้ข้อมูลจะถูกเก็บในไฟล์ชั่วคราวแทนหน่วยความจำ
php://filter
Wrapper นี้อนุญาตให้ใช้ filter กับสตรีมเมื่อเปิดมัน Filters มีประโยชน์โดยเฉพาะกับฟังก์ชัน readfile(), file_get_contents() และ file()
ตัวอย่าง
ในตัวอย่างต่อไปนี้ รับอินพุตจากคอนโซลผ่าน php://stdin และแสดงผลด้วย php://stdout
<?php $file = fopen("php://stdin", "r"); $x = fread($file, 10); echo $x; $out = fopen("php://stdout", "w"); fwrite($out, $x); fclose($file); ?>php://input stream wrapper อนุญาตให้ดึงข้อมูลดิบจาก HTTP request ในตัวอย่างต่อไปนี้ HTML form ส่งข้อมูลไปยัง PHP script ด้วยเมธอด POST
<html> <body> <form action="testscript.php" method="POST"> <input type="text" name="name"> <input type="text" name="age"> <input type="submit" value="submit"> </form> </body> </html>
PHP script สำหรับดึงข้อมูล HTTP ดิบ มีดังนี้
<?php $json = file_get_contents("php://input"); $data = json_decode($json); print_r($json); ?>