Cách gỡ lỗi các vấn đề shell_exec
OK, ở đây chúng tôi có một vấn đề: một số thứ hoạt động trong thiết bị đầu cuối và không hoạt động trong shell_exec của php (hoặc exec, spawn, bất cứ điều gì). Hãy nghĩ xem: sự khác biệt giữa Bạn và php là gì? Đây là ba:
PHP được thực thi từ các quy tắc máy chủ HTTP
Thật vậy, thiết bị đầu cuối của bạn đang chạy từ yourname
người dùng và php được thực thi từ www-data
. Vì vậy, ý tưởng đầu tiên là mở terminal từ www-data
người dùng và thử cùng một lệnh. Vì thế....
- Mở
/etc/passwd
tệp, tìm dòng với www-data
người dùng và thay đổi vỏ đăng nhập (cái cuối cùng) từ /bin/false
(hoặc bất cứ thứ gì) thành /bin/bash
.
- Mở
www-data
thiết bị đầu cuối:su www-data
- Hãy thử php -v hoặc bất cứ điều gì bạn không thể thực hiện từ php. Nếu nó không hoạt động - Bạn sẽ thấy các bản ghi đẹp và sẽ có thể gỡ lỗi.
- Đừng quên sửa lại
/etc/passwd
tệp trong khi bạn đã hoàn tất
PHP được thực thi từ PHP .
PHP là enogh hoang tưởng và có rất nhiều tùy chọn trong cấu hình apache / nginx và php.ini có thể phá vỡ nỗ lực của bạn.
Đây là một chút phức tạp để gỡ lỗi. Có hai lựa chọn ở đây:
Kích hoạt nhật ký trong trình duyệt và xem vấn đề. Chỉnh sửa của bạn php.ini
, bật display_errors
và tất cả các cờ khác để xem lỗi trong trình duyệt. Họ Bạn có thể đọc và gỡ lỗi chúng.
Lấy www-data
shell của nó (xem phần đầu tiên) và thực hiện một cái gì đó như
echo '<?php shell_exec("php -v"); ?>' | php
sẽ thực thi cùng một mã php trong bảng điều khiển và bạn sẽ có thể thấy lỗi và gỡ lỗi.
PHP được thực thi từ SELinux / apparmor
Selinux và apparmor là những thứ bảo mật cấm các ứng dụng thực hiện các hành động cụ thể (ví dụ: sinh ra các ứng dụng khác hoặc một số ứng dụng cụ thể khác). Có lẽ nó được kích hoạt trên máy chủ của bạn.
Để kiểm tra - vô hiệu hóa selinux / apparmor và kiểm tra xem có vấn đề gì không.
Để khắc phục - đọc hướng dẫn thích hợp và sửa các quy tắc cho phép đối với trường hợp của bạn.