2012-03-01 22 views
107

Tôi muốn thực hiện một câu lệnh php đơn như if(function_exists("my_func")) echo 'function exists'; trực tiếp với dòng lệnh mà không cần phải sử dụng tệp php riêng biệt.Làm thế nào để thực thi mã PHP từ dòng lệnh?

Làm cách nào có thể?

+1

làm function_exists() mà không sử dụng bất kỳ tệp nào khác chứa hàm do người dùng xác định sẽ không tốt lắm, ngoại trừ kiểm tra phiên bản PHP mà bạn có thể tìm hiểu theo các cách khác. Bạn muốn kiểm tra hàm nào? –

+0

Tôi đang tìm thử nghiệm chức năng này: sg_load() – Steve

+2

Âm thanh như những gì bạn thực sự muốn là tìm hiểu xem phần mở rộng sourceguardian php có được bật không? –

Trả lời

173

Nếu bạn định thực hiện PHP trong dòng lệnh, tôi khuyên bạn nên cài đặt phpsh, a decent PHP shell. Thật thú vị hơn rất nhiều.

Dù sao, lệnh php cung cấp hai công tắc để thực thi mã từ dòng lệnh:

-r <code>  Run PHP <code> without using script tags <?..?> 
-R <code>  Run PHP <code> for every input line 

Bạn có thể sử dụng php của -r chuyển như vậy:

php -r 'echo function_exists("foo") ? "yes" : "no";' 

Trên đây Lệnh PHP ở trên nên đầu ranotrả về0 như bạn có thể thấy:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";' 
no 
>>> echo $? # print the return value of the previous command 
0 

Một switch vui được php -a:

-a    Run as interactive shell 

Đó là loại què so với phpsh, nhưng nếu bạn không muốn cài đặt the awesome interactive shell for php made by facebook to get tab completion, history, and so on, sau đó sử dụng -a như vậy:

>>> php -a 
Interactive shell 

php > echo function_exists("foo") ? "yes" : "no"; 
no 
php > 

Nếu nó không hoạt động vào máy của bạn như trên hộp của tôi * es * (thử nghiệm trên Ubuntu và Arch), sau đó lẽ thiết lập PHP của bạn là mờ hoặc bị hỏng. Nếu bạn chạy lệnh này:

php -i | grep 'API' 

Bạn nên xem:

Server API => Command Line Interface 

Nếu bạn không, điều này có nghĩa rằng lẽ lệnh khác sẽ cung cấp CLI SAPI. Hãy thử php-cli, có thể đó là một gói hoặc một lệnh có sẵn trong hệ điều hành của bạn.

Nếu bạn làm thấy rằng lệnh php của bạn sử dụng CLI (Command Line Interface) SAPI (Server API), sau đó chạy php -h | grep code để tìm hiểu công tắc mà điên - như thế này đã không thay đổi trong năm- phép để chạy mã trong phiên bản/thiết lập của bạn.

Một vài ví dụ, chỉ để chắc chắn rằng nó hoạt động trên hộp của tôi:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no 
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes 

Ngoài ra, lưu ý rằng nó có thể là một phần mở rộng được nạp trong CLI và không nằm trong CGI hoặc Apache SAPI.Có thể một số SAPI PHP sử dụng các tệp php.ini khác nhau, ví dụ: /etc/php/cli/php.ini so với /etc/php/cgi/php.ini so với /etc/php/apache/php.ini trên hộp Gentoo. Tìm hiểu tệp ini nào được sử dụng với php -i | grep ini.

+3

nó không trả lại bất cứ điều gì – Steve

+0

Có lẽ thiết lập php của bạn bị hỏng. Tôi cập nhật câu trả lời của tôi bao gồm cả gợi ý để tìm ra. – jpic

+0

Đã thêm ghi chú về php -a có thể hữu ích cho bạn. – jpic

1

Trên dòng lệnh:

php -i | grep sourceguardian 

Nếu nó ở đó, sau đó bạn sẽ nhận được một số văn bản. Nếu không, bạn sẽ không nhận được một điều gì.

+0

Hoặc tôi bị mù hoặc câu trả lời này không liên quan gì đến câu hỏi. Làm thế nào câu trả lời này là nghĩa vụ phải trả lời câu hỏi yêu cầu "_Làm thế nào để chạy mã PHP trực tiếp từ dòng lệnh, mà không lưu mã PHP vào tập tin' .php'? _ "? – trejder

+6

@trejder Trong một khoảnh khắc, tôi tự hỏi nếu tôi đã trả lời câu hỏi sai, nhưng sau đó tôi nhìn vào lịch sử chỉnh sửa và bình luận. Điều này trả lời những gì OP xuất hiện để thực sự cần: tìm hiểu xem một phần mở rộng PHP cụ thể đã được tải chưa. Câu hỏi đã được lặp lại, do đó, nó không phù hợp tốt như vậy bây giờ. –

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