Thư viện các hàm tích hợp sẵn của PHP bao gồm một danh mục các hàm liên quan đến việc gọi các tiện ích của hệ điều hành và các chương trình bên ngoài từ bên trong mã PHP. Trong chương này, chúng ta sẽ thảo luận về các hàm PHP được sử dụng để thực hiện các cuộc gọi hệ thống.
Hàm system() trong PHP tương tự như hàm system() trong C, vì nó thực thi lệnh đã cho và xuất kết quả.
system(string $command, int &$result_code = null): string|false
Lệnh system() cố gắng tự động xóa bộ đệm đầu ra của máy chủ web sau mỗi dòng đầu ra nếu PHP đang chạy dưới dạng một mô-đun máy chủ. Nó trả về dòng cuối cùng của đầu ra lệnh khi thành công và false khi thất bại.
Đoạn mã PHP sau đây gọi lệnh DIR của hệ điều hành Windows và hiển thị danh sách các tệp trong thư mục hiện tại.
<?php echo '<pre>'; // Outputs all the result of DOS command "dir", and returns // the last output line into $last_line. Stores the return value // of the shell command in $retval. $last_line = system('dir/w', $retval); // Printing additional info echo ' </pre> <hr />Last line of the output: ' . $last_line . ' <hr />Return value: ' . $retval; ?>
Nó sẽ tạo ra output −
Volume in drive C has no label. Volume Serial Number is 7EE4-E492 Directory of C:\xampp\htdocs [.] [..] applications.html bitnami.css [dashboard] employee.csv favicon.ico hello.csv hello.html hello.php homepage.php [img] index.php [Langi] menu.php myform.php myname.php new.png new.txt test.php test.zip [TPcodes] uploadfile.php [webalizer] welcome.png [xampp] 18 File(s) 123,694 bytes 8 Dir(s) 168,514,232,320 bytes free Last line of the output: 8 Dir(s) 168,514,232,320 bytes free Return value: 0
Hàm shell_exec() giống như toán tử dấu nháy đơn của PHP. Nó thực thi lệnh đã cho qua shell và trả về toàn bộ đầu ra dưới dạng một chuỗi.
shell_exec(string $command): string|false|null
Hàm này trả về một chuỗi chứa đầu ra từ lệnh đã thực thi, false nếu không thể thiết lập ống dẫn hoặc null nếu xảy ra lỗi hoặc lệnh không tạo ra đầu ra.
Trong đoạn mã sau, chúng ta sử dụng hàm shell_exec() để lấy danh sách các tệp có đuôi ".php" trong thư mục hiện tại −
<?php $output = shell_exec('dir *.php'); echo "<pre>$output</pre>"; ?>
Nó sẽ tạo ra output −
Volume in drive C has no label. Volume Serial Number is 7EE4-E492 Directory of C:\xampp\htdocs 10/26/2023 08:27 PM 73 hello.php 10/12/2023 10:40 AM 61 homepage.php 07/16/2015 09:02 PM 260 index.php 10/12/2023 10:39 AM 49 menu.php 09/25/2023 01:43 PM 338 myform.php 10/12/2023 10:49 AM 51 myname.php 10/26/2023 02:00 PM 369 test.php 09/25/2023 01:42 PM 555 uploadfile.php 8 File(s) 1,756 bytes 0 Dir(s) 168,517,771,264 bytes free
Hàm exec() thực thi lệnh đã cho dưới dạng đối số chuỗi.
exec(string $command, array &$output = null, int &$result_code = null):string|false
Tham số $output , nếu được chỉ định, là một mảng sẽ được điền với mọi dòng đầu ra từ lệnh.
Trong trường hợp này, chúng ta sử dụng hàm exec() để gọi lệnh whoami từ bên trong chương trình. Lệnh whoami trả về tên người dùng.
<?php // outputs the username that owns the running php/httpd process // (on a system with the "whoami" executable in the path) $output=null; $retval=null; exec('whoami', $output, $retval); echo "Returned with status $retval and output:\n"; var_dump($output); ?>
Nó sẽ tạo ra output −
Returned with status 0 and output: array(1) { [0]=> string(13) "gnvbgl3\mlath" }
Hàm passthru() thực thi một chương trình bên ngoài và hiển thị đầu ra thô. Mặc dù hàm passthru() tương tự như hàm exec() hoặc system() ở chỗ nó thực thi một lệnh, nhưng nó nên được sử dụng thay cho chúng khi đầu ra từ lệnh hệ điều hành là dữ liệu nhị phân cần được chuyển trực tiếp trở lại trình duyệt.
Một chương trình PHP sử dụng hàm `passthru()` để hiển thị nội dung của biến môi trường PATH trong hệ thống có thể được viết như sau: ```php ``` Chương trình này sẽ gọi lệnh `echo $PATH` thông qua hàm `passthru()`, và kết quả sẽ được hiển thị trực tiếp trên trình duyệt hoặc cửa sổ dòng lệnh.
passthru(string $command, int &$result_code = null): ?false <?php passthru ('PATH'); ?>
Nó sẽ tạo ra output −
PATH=C:\Python311\Scripts\;C:\Python311\;C:\WINDOWS\system32;C:\WINDOWS; C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\; C:\WINDOWS\System32\OpenSSH\;C:\xampp\php;C:\Users\mlath\AppData\Local \Microsoft\WindowsApps;C:\VSCode\Microsoft VS Code\bin
PHP hỗ trợ một toán tử thực thi: dấu ngoặc đơn ngược (``). (chúng không phải là dấu nháy đơn!) PHP sẽ cố gắng thực thi nội dung của dấu ngoặc đơn ngược như một lệnh shell; đầu ra sẽ được trả về. Việc sử dụng toán tử dấu ngoặc đơn ngược giống như shell_exec().
Hãy xem xét ví dụ sau đây −
<?php $output = `dir *.php`; echo "<pre>$output</pre>"; ?>
Nó sẽ tạo ra output −
Volume in drive C has no label. Volume Serial Number is 7EE4-E492 Directory of C:\xampp\htdocs 10/26/2023 08:42 PM 61 hello.php 10/12/2023 10:40 AM 61 homepage.php 07/16/2015 09:02 PM 260 index.php 10/12/2023 10:39 AM 49 menu.php 09/25/2023 01:43 PM 338 myform.php 10/12/2023 10:49 AM 51 myname.php 10/26/2023 02:00 PM 369 test.php 09/25/2023 01:42 PM 555 uploadfile.php 8 File(s) 1,744 bytes 0 Dir(s) 168,471,289,856 bytes free
Toán tử backtick bị vô hiệu hóa khi shell_exec() bị vô hiệu hóa.