2009-01-13 23 views
7

Tôi đang sử dụng mã php này:bất hợp pháp mã lỗi lệnh 127 trong chức năng php exec

exec("unrar e file.rar",$ret,$code); 

và nhận được một mã lỗi của lệnh bất hợp pháp tức là 127 ... nhưng khi tôi đang sử dụng lệnh này thông qua ssh làm việc của nó ... bởi vì unrar được cài đặt trên máy chủ ... vì vậy bất cứ ai có thể đoán tại sao exec không làm đúng công cụ?

+0

chỉ một suy nghĩ: là file.rar chắc chắn trong cùng một thư mục mà các tập lệnh php đang chạy trong? Và là unrar trong một thư mục có trong PATH? – Ben

+0

yeah file.rar nằm trong cùng một thư mục ... unrar được cài đặt trên hệ thống ... có bất kỳ ath cụ thể nào cần được thực thi bởi php exec không? – Intellex

+0

Tôi nói với nó làm việc tốt trên thiết bị đầu cuối mà im sử dụng thông qua ssh – Intellex

Trả lời

21

Hãy thử sử dụng đường dẫn trực tiếp của ứng dụng (/ usr/bin/unrar của bất kỳ thứ gì), có vẻ như php không thể tìm thấy ứng dụng.

+0

Tôi phải đồng ý nó âm thanh như thư mục chứa nhị phân unrar không được bao gồm trong PATH var để sử dụng một đường dẫn trực tiếp sẽ giúp, hoặc chỉ cần thêm nhị phân vào thư mục nếu không tìm thấy đường dẫn. – UnkwnTech

3

thanx tất cả cho câu trả lời của bạn !!

Tôi cố gắng này

 
//somedir is inside the directory where php file is 
chdir("somedir"); 
exec("/home/username/bin/unrar e /home/path/to/dir/file.rar"); 

và bây giờ nó quay trở lại không có mã lối ra ... lệnh oher đang làm tập tin .. tôi đã cố gắng mkdir vv ..: s

+0

btw lệnh này đang chạy thẳng trên vỏ – Intellex

1

ohkiee guyz thanx .. . và có có thể có một số lỗi với $ pATH ... nhưng với đường dẫn đầy đủ cho hoạt động của mình :)

 
exec("/home/user/bin/unrar e /home/user/xxx/yyy/file.rar"); 

7

Nếu bạn đã chroot apache và php, bạn cũng sẽ muốn đặt/bin/sh vào môi trường chroot. Nếu không, các exec() hoặc passthru() sẽ không hoạt động đúng, và sẽ sản xuất mã lỗi 127, tập tin không tìm thấy.

+0

Điều này giải quyết được vấn đề cho tôi. Cảm ơn! –

1

Chỉ trong trường hợp người khác vẫn được vấn đề này, hãy xem các bài ở đây:

http://gallery.menalto.com/node/2639#comment-8638

Trích:

tôi thấy vấn đề. Vấn đề là OpenBSD an toàn hoang tưởng của tôi. Khi nâng cấp từ 3,1 lên 3,2, họ đã thêm:

  • Apache chạy chroot'd theo mặc định. Để tắt tính năng này, hãy xem tùy chọn -u mới.

Chroot ngăn Apache truy cập bất kỳ thứ gì bên ngoài thư mục, vì vậy tôi đã chuyển mọi thứ vào thư mục apache bao gồm netpbm. Mọi thứ đều có thể truy cập và thực thi được, nhưng tôi đoán nó vẫn ở dạng "chế độ an toàn" vì exec() luôn trả về 127.

Dù sao, chạy httpd với tùy chọn -u quay trở lại chroot non an toàn hơn Khởi động apache, cho phép hàm exec() hoạt động trở lại.

4

Vì đây đi lên như một câu trả lời đầu trong google, tôi muốn chia sẻ sửa chữa của tôi:

Việc sửa chữa đơn giản tôi đã có được để vô hiệu hóa safe_mode trong file php.ini

; Safe Mode 
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode 
safe_mode = Off 
+0

Chế độ an toàn đã bị xóa khỏi PHP kể từ phiên bản 5.4.0. http://php.net/manual/en/features.safe-mode.php – Nick

Các vấn đề liên quan