Làm thế nào để thực thi mã PHP từ dòng lệnh?


163

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

Làm thế nào là nó có thể ?


1
thực hiện 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ừ việc 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 chức năng gì?
Matt Gibson

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

2
Âm thanh giống như những gì bạn thực sự muốn là tìm hiểu xem phần mở rộng php nguồnguard được kích hoạt?
Matt Gibson

2
sau đó phpinfo () sẽ cho bạn biết.
jpic

Câu trả lời:


256

Nếu bạn định làm PHP trong dòng lệnh, tôi khuyên bạn nên cài đặt phpsh, một trình bao PHP tốt . Nó vui hơn 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 chuyển đổi -r của php như vậy:

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

Lệnh PHP ở trên sẽ xuất ra notrả 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 chuyển đổi vui nhộn khác là php -a :

-a               Run as interactive shell

Đó là một sự khập khiễng so với phpsh , nhưng nếu bạn không muốn cài đặt trình vỏ tương tác tuyệt vời cho php được tạo bởi facebook để hoàn thành tab, lịch sử, v.v. , thì hãy 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 trên hộp của bạn như trên hộp của tôi * es * ( đã thử nghiệm trên Ubuntu và Arch), thì có lẽ thiết lập PHP của bạn bị mờ hoặc bị hỏng . Nếu bạn chạy lệnh này:

php -i | grep 'API'

Bạn sẽ thấy:

Server API => Command Line Interface

Nếu bạn không , điều này có nghĩa là có thể một 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ĐH của bạn.

Nếu bạn thấy rằng lệnh php của bạn sử dụng CLI (Giao diện dòng lệnh) SAPI (API máy chủ), thì hãy chạy php -h | grep codeđể tìm ra công tắc điên nào - vì điều này đã không thay đổi trong năm - cho phép chạy mã trong phiên bản / thiết lập của bạn.

Một vài ví dụ khác, chỉ để đảm bảo nó hoạt động trên các 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 có thể một tiện ích mở rộng được tải trong CLI chứ không phải trong CGI hoặc Apache SAPI. Có khả năng một số SAP SAPI sử dụng các tệp php.ini khác nhau , ví dụ /etc/php/cli/php.inivs /etc/php/cgi/php.inivs /etc/php/apache/php.initrên hộp Gentoo. Tìm hiểu tập tin ini được sử dụng với php -i | grep ini.


Có thể 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ác gợi ý để tìm ra nó.
jpic

Đã thêm một lưu ý về php -a có thể hữu ích cho bạn.
jpic

6
Lưu ý rằng phpsh không còn được duy trì bởi tác giả của nó (Facebook) và ai đó trên trang Google Groups đã nói vào năm 2012 rằng "phpsh không thực sự được hỗ trợ hoặc hữu ích nữa" . Bạn có thể xem xét REPL cho một bảng điều khiển php cải tiến.
Ben Creasy

3

Trên dòng lệnh:

php -i | grep sourceguardian

Nếu nó ở đó, thì 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.


4
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 được cho là để trả lời câu hỏi " 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 .phptệp? "?
trejder

15
@trejder Trong một khoảnh khắc, tôi tự hỏi liệu tôi đã trả lời sai câu hỏi chưa, 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 dường như 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 đăng lại, vì vậy bây giờ nó không phù hợp lắm.
Matt Gibson

3

Bạn có thể dùng :

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

Thẻ ngắn " <? = " Cũng có thể hữu ích:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

Thẻ đóng Tha "?>" Là tùy chọn, nhưng đừng quên cuối cùng ";" !


2
Điều này dường như là rắc rối hơn câu trả lời 7 tuổi được chấp nhận. Sử dụng php -rbạn không cần phải lo lắng về việc mở các thẻ PHP.
miken32

1

Sử dụng PHP từ dòng lệnh

sử dụng " thay vì ' trên windows khi sử dụng phiên bản cli với -r

php -r "echo 1"

-- chính xác

php -r 'echo 1'

- không chính xác

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.