Trên Window thì ok, không vấn đề gì nhưng trên Linux mặc định cơ chế bảo mật nó cao quá nên thằng WebServer không có quyền bắt python phải làm cái này, python phải làm cái kia
PHP: Ê Python, chạy cái này cho tao!
Python: Méooo....!!! :v
Thế thì làm sao?
Cấp quyền cho Webserver gọi shell
Do bảng chất khi WebServer thực hiện code php thì nó cũng đang chạy dưới danh nghĩa 1 user (nào đó) trong Linux, do vậy cần tìm nó và gán quyền "Ông trưởng bộ phận" cho nó để nó để nó có quyền "điều binh khiển tướng" =))
Xem user chạy Web là thằng nào
ps aux | grep httpd
ps aux | grep lampp
ps aux | grep nginx
ps aux | grep apache
Tùy cài cái nào mà kiểm tra cái đó, như mình cái XAMPP (LAMPP)
Nếu nhìn vô mớ hỗn độn kia không hiểu chi mô hết (giống mình =)) ) thì test thử bằng cách chạy lệnh sau trong php
echo exec("sudo -S pip --version 2>&1");
Nhớ chạy trong php nhá!
Lúc này màn hình sẽ bắt nhập password cho cái thằng user nào quản lý Webserver, chỉ việc nhớ tên nó thôi. Như trong trường hợp của mình nó là:
deamon
deamon có nghĩa là nobody, không ai cả @@! chạy nặc danh đấy!
Gán quyền cho Deamon (Giống Doraemon nhỉ :v )
Tìm đến file sau:
/etc/sudoers
File này lưu giữ các quyền sudo của các user trong hệ thống
Kéo xuống thêm dòng này
daemon ALL=(ALL) NOPASSWD:ALL
Đại loại là gán full quyền cho deamon, và không yêu cầu password nữa
Mẹo cho những ai quen Window
Chúng ta có thể chmod file lại thành 777 để sửa cho dễ, sau đó chmod lại 755 để trả về như cũ.
chmod 777 /etc/sudoers
chmod 755 /etc/sudoers
Nếu vẫn để chmod 777 thì sẽ không gọi được lệnh sudo đâu nhá
Kiểm tra xem php gọi được python chưa
Chạy lại đoạn sau
echo exec("sudo -S pip --version 2>&1");
Lúc này hiện version python là ok
Xong, vậy thôi đó mà làm mình mất cả buổi :')
-soiqualang_chentreu-
]]>